2010wk36_01
authorhgs
Thu, 16 Sep 2010 18:57:38 +0100
changeset 58 b6dbf97aba93
parent 57 1cbb0d5bf7f2
child 59 89a17f5534e9
2010wk36_01
devsoundextensions/addeddevsoundcontrol/AddedDevSoundControlMsgHdlr/Group/AddedDevSoundControlMsgHdlr.mmp
devsoundextensions/audiorouting/Input/AudioInputBase/group/AudioInput.mmp
devsoundextensions/audiorouting/Input/AudioInputMessageHandler/Group/AudioInputMessageHandler.mmp
devsoundextensions/audiorouting/Output/AudioOutputBase/group/AudioOutput.mmp
devsoundextensions/audiorouting/Output/AudioOutputMessageHandler/Group/AudioOutputMessageHandler.mmp
devsoundextensions/audiorouting/Output/AudioOutputProxy/src/AudioOutputProxy.cpp
devsoundextensions/drmaudioplayer/DRMPlayServer/src/DRMPlaySession.cpp
devsoundextensions/drmaudioplayer/DRMPlayUtility/group/DRMPlayUtility.mmp
devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Group/AudioEqualizerEffect.mmp
devsoundextensions/effects/AudioEqualizer/AudioEqualizerMessageHandler/Group/AudioEqualizerMessageHandler.mmp
devsoundextensions/effects/AudioEqualizer/AudioEqualizerProxy/Group/AudioEqualizerProxy.mmp
devsoundextensions/effects/BassBoost/BassBoostEffect/Group/BassBoostEffect.mmp
devsoundextensions/effects/BassBoost/BassBoostMessageHandler/Group/BassBoostMessageHandler.mmp
devsoundextensions/effects/BassBoost/BassBoostProxy/Group/BassBoostProxy.mmp
devsoundextensions/effects/DistAtten/DistanceAttenuationEffect/Group/DistanceAttenuationEffect.mmp
devsoundextensions/effects/DistAtten/DistanceAttenuationMessageHandler/Group/DistanceAttenuationMessageHandler.mmp
devsoundextensions/effects/DistAtten/DistanceAttenuationProxy/Group/DistanceAttenuationProxy.mmp
devsoundextensions/effects/DopplerBase/Group/DopplerBase.mmp
devsoundextensions/effects/EffectBase/Group/EffectBase.mmp
devsoundextensions/effects/EnvReverb/EnvironmentalReverbEffect/Group/EnvironmentalReverbEffect.mmp
devsoundextensions/effects/EnvReverb/EnvironmentalReverbMessageHandler/Group/EnvironmentalReverbMessageHandler.mmp
devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Group/EnvironmentalReverbProxy.mmp
devsoundextensions/effects/ListDoppler/ListenerDopplerEffect/Group/ListenerDopplerEffect.mmp
devsoundextensions/effects/ListDoppler/ListenerDopplerMessageHandler/Group/ListenerDopplerMessageHandler.mmp
devsoundextensions/effects/ListDoppler/ListenerDopplerProxy/Group/ListenerDopplerProxy.mmp
devsoundextensions/effects/ListLocation/ListenerLocationEffect/Group/ListenerLocationEffect.mmp
devsoundextensions/effects/ListLocation/ListenerLocationMessageHandler/Group/ListenerLocationMessageHandler.mmp
devsoundextensions/effects/ListLocation/ListenerLocationProxy/Group/ListenerLocationProxy.mmp
devsoundextensions/effects/ListOrient/ListenerOrientationEffect/Group/ListenerOrientationEffect.mmp
devsoundextensions/effects/ListOrient/ListenerOrientationMessageHandler/Group/ListenerOrientationMessageHandler.mmp
devsoundextensions/effects/ListOrient/ListenerOrientationProxy/Group/ListenerOrientationProxy.mmp
devsoundextensions/effects/LocationBase/Group/LocationBase.mmp
devsoundextensions/effects/Loudness/LoudnessEffect/Group/LoudnessEffect.mmp
devsoundextensions/effects/Loudness/LoudnessMessageHandler/Group/LoudnessMessageHandler.mmp
devsoundextensions/effects/Loudness/LoudnessProxy/Group/LoudnessProxy.mmp
devsoundextensions/effects/OrientationBase/Group/OrientationBase.mmp
devsoundextensions/effects/RoomLevel/RoomLevelEffect/Group/RoomLevelEffect.mmp
devsoundextensions/effects/RoomLevel/RoomLevelMessageHandler/Group/RoomLevelMessageHandler.mmp
devsoundextensions/effects/RoomLevel/RoomLevelProxy/Group/RoomLevelProxy.mmp
devsoundextensions/effects/SrcDoppler/SourceDopplerEffect/Group/SourceDopplerEffect.mmp
devsoundextensions/effects/SrcDoppler/SourceDopplerMessageHandler/Group/SourceDopplerMessageHandler.mmp
devsoundextensions/effects/SrcDoppler/SourceDopplerProxy/Group/SourceDopplerProxy.mmp
devsoundextensions/effects/SrcLocation/SourceLocationEffect/Group/SourceLocationEffect.mmp
devsoundextensions/effects/SrcLocation/SourceLocationMessageHandler/Group/SourceLocationMessageHandler.mmp
devsoundextensions/effects/SrcLocation/SourceLocationProxy/Group/SourceLocationProxy.mmp
devsoundextensions/effects/SrcOrientation/SourceOrientationEffect/Group/SourceOrientationEffect.mmp
devsoundextensions/effects/SrcOrientation/SourceOrientationMessageHandler/Group/SourceOrientationMessageHandler.mmp
devsoundextensions/effects/SrcOrientation/SourceOrientationProxy/Group/SourceOrientationProxy.mmp
devsoundextensions/effects/StereoWidening/StereoWideningEffect/Group/StereoWideningEffect.mmp
devsoundextensions/effects/StereoWidening/StereoWideningMessageHandler/Group/StereoWideningMessageHandler.mmp
devsoundextensions/effects/StereoWidening/StereoWideningProxy/Group/StereoWideningProxy.mmp
devsoundextensions/effectspresets/AudioEqualizerUtility/group/AudioEqualizerUtility.mmp
devsoundextensions/effectspresets/EnvironmentalReverbUtility/group/EnvironmentalReverbUtility.mmp
devsoundextensions/effectspresets/StereoWideningUtility/group/StereoWideningUtility.mmp
devsoundextensions/globalaudiosettings/group/GlobalAudioSettings.mmp
devsoundextensions/mmextfw/customcommandutility/Group/CustomCommandUtility.mmp
devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceBuilder/Group/CustomInterfaceBuilder.mmp
devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceUtility/Group/CustomInterfaceUtility.mmp
devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfig/group/AacDecoderConfig.mmp
devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfigMsgHdlr/Group/AacDecoderConfigMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfc/Group/EAacPlusDecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfcMsgHdlr/Group/EAacPlusDecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfc/group/ErrorConcealmentIntfc.mmp
devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfcMsgHdlr/Group/ErrorConcealmentIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfc/group/G711DecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfcMsgHdlr/Group/G711DecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfc/group/G711EncoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfcMsgHdlr/Group/G711EncoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfc/group/G729DecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfcMsgHdlr/Group/G729DecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfc/group/G729EncoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfcMsgHdlr/Group/G729EncoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfc/group/IlbcDecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfcMsgHdlr/Group/IlbcDecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfc/group/IlbcEncoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfcMsgHdlr/Group/IlbcEncoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfc/Group/Ra8DecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcMsgHdlr/Group/Ra8DecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcProxy/Group/Ra8DecoderIntfcProxy.mmp
devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfc/Group/SbcEncoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcMsgHdlr/Group/SbcEncoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcProxy/src/SbcEncoderIntfcProxy.cpp
devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfig/group/SpeechEncoderConfig.mmp
devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigMsgHdlr/Group/SpeechEncoderConfigMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigProxy/src/SpeechEncoderConfigProxy.cpp
devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfc/Group/WmaDecoderIntfc.mmp
devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcMsgHdlr/Group/WmaDecoderIntfcMsgHdlr.mmp
devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcProxy/src/WmaDecoderIntfcProxy.cpp
devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputBase/group/RestrictedAudioOutput.mmp
devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputMessageHandler/Group/RestrictedAudioOutputMessageHandler.mmp
devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputProxy/Group/RestrictedAudioOutputProxy.mmp
devsoundextensions/telephonyaudiorouting/Server/src/TelephonyAudioRoutingServer.cpp
layers.sysdef.xml
mdfdevvideoextensions/group/bld.inf
mdfdevvideoextensions/nga_mdf_postprocessor/group/bld.inf
mdfdevvideoextensions/nga_mdf_postprocessor_shai/data/nga_mdf_postprocessor_stub.pkg
mdfdevvideoextensions/nga_mdf_postprocessor_shai/data/nga_mdf_postprocessor_stub.sis
mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/NGAPostProcHwDevice.mmp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/bld.inf
mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/nga_mdf_postprocessor.pkg
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/Colorconversion.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/MdfRDebug.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcHwDevice.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcHwDevice_UID.hrh
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcNotifier.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSessionManager.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSessionManagerObserver.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSurfaceHandler.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/common.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/devvideosurfacehandlecustominterface.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/fetchframecustominterface.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/postinitializeci.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/surface_hints.h
mdfdevvideoextensions/nga_mdf_postprocessor_shai/rom/NGA_MDF_Postprocessor.iby
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/200195AF.rss
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/Colorspace_conv_yuv.c
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/ImplementationProxy.cpp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcHwDevice.cpp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcNotifier.cpp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcSessionManager.cpp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcSurfaceHandler.cpp
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/colorconversion.c
mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/myfopen.c
mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/inc/AudioRoutingTestClass.h
mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocks.cpp
mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocksCallbacks.cpp
mm_plat/audio_routing_api/tsrc/Conf/AudioRoutingTestClass.cfg
mm_pub/drm_audio_player_api/tsrc/data/mmc/drm/test3gp.dcf
mm_pub/drm_audio_player_api/tsrc/data/mmc/drm/testmp3.dcf
mmhais/refacladapt/src/audiostream/audiostream.cpp
mmlibs/mmfw/Recogniser/src/filereader.cpp
mmlibs/mmfw/Recogniser/src/mpeg4parser.cpp
mmlibs/mmfw/Recogniser/src/parsers.h
mmlibs/mmfw/Recogniser/src/reader.cpp
mmlibs/mmfw/Recogniser/src/readers.h
mmlibs/mmfw/inc/mmf/server/mmfdatapath2.h
mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.cpp
mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.h
mmlibs/mmfw/src/Client/Utility/mmfclientutility.cpp
mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp
mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/group/tsi_mmf_vclnt_data.pkg
mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/scripts/TSI_MMF_VCLNT_WM.script
mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/group/tsi_mmf_vclntavi_data.pkg
mmlibs/mmfw/tsrc/mmfunittest/VCLNT/TSU_MMF_VCLNT_01/src/TestStepAllocFailVidPlayer.cpp
mmlibs/mmfw/tsrc/mmfunittest/VCLNT/group/tsu_mmf_vclnt_data.pkg
mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_ALLOC_WM.script
mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_WM_CAF_V2.script
mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_DRM_ALLOC.script
mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/group/tsi_mvs_agents_data.pkg
mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/scripts/tsi_mvs_videoagent.script
mmplugins/lib3gp/impl/inc/filewriter.h
mmplugins/lib3gp/impl/src/file.cpp
mmplugins/lib3gp/impl/src/filewriter.cpp
mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_api_te.script
mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3g2_te.script
mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3gp_te.script
mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_mp4_te.script
mmplugins/lib3gpunittest/scripts/tsu_3gp_performance_te.script
package_definition.xml
--- a/devsoundextensions/addeddevsoundcontrol/AddedDevSoundControlMsgHdlr/Group/AddedDevSoundControlMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/addeddevsoundcontrol/AddedDevSoundControlMsgHdlr/Group/AddedDevSoundControlMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/common
 
 LIBRARY         euser.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 
 // End of File
--- a/devsoundextensions/audiorouting/Input/AudioInputBase/group/AudioInput.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/audiorouting/Input/AudioInputBase/group/AudioInput.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,5 +36,5 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         euser.lib MMFDevSound.lib CustomInterfaceUtility.lib CustomCommandUtility.lib MediaClientAudioInputStream.lib
+LIBRARY         euser.lib mmfdevsound.lib CustomInterfaceUtility.lib CustomCommandUtility.lib mediaclientaudioinputstream.lib
 LIBRARY         mediaclientvideo.lib
--- a/devsoundextensions/audiorouting/Input/AudioInputMessageHandler/Group/AudioInputMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/audiorouting/Input/AudioInputMessageHandler/Group/AudioInputMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,5 +35,5 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         euser.lib MmfControllerFramework.lib
+LIBRARY         euser.lib mmfcontrollerframework.lib
 
--- a/devsoundextensions/audiorouting/Output/AudioOutputBase/group/AudioOutput.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/audiorouting/Output/AudioOutputBase/group/AudioOutput.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -44,7 +44,7 @@
 LIBRARY         CustomCommandUtility.lib
 LIBRARY	        mediaclientaudio.lib
 LIBRARY         mediaclientaudiostream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mmfdevsound.lib
 LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientvideo.lib
 
--- a/devsoundextensions/audiorouting/Output/AudioOutputMessageHandler/Group/AudioOutputMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/audiorouting/Output/AudioOutputMessageHandler/Group/AudioOutputMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,6 +36,6 @@
 
 OS_LAYER_SYSTEMINCLUDE
 
-LIBRARY         euser.lib MmfControllerFramework.lib
+LIBRARY         euser.lib mmfcontrollerframework.lib
 
 
--- a/devsoundextensions/audiorouting/Output/AudioOutputProxy/src/AudioOutputProxy.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/audiorouting/Output/AudioOutputProxy/src/AudioOutputProxy.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -192,7 +192,14 @@
 	{
 	iSecureOutput = aSecureOutput;
 	TPckgC<TBool> outputPckg(aSecureOutput);
-	iCustomCommand->CustomCommandSync(iMessageHandler, EAofSetSecureOutput, outputPckg, KNullDesC8);
+        TInt err = KErrNone;
+        //ou1cimx1#454515 CAudioOutputConfigurator::SetSecureOutputL() is deprecated
+	err = iCustomCommand->CustomCommandSync(iMessageHandler, EAofSetSecureOutput, outputPckg, KNullDesC8);
+	if(err != KErrNone)
+		{
+			User::Leave(err);
+		}
+	
 	}
 
 // ---------------------------------------------------------
--- a/devsoundextensions/drmaudioplayer/DRMPlayServer/src/DRMPlaySession.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/drmaudioplayer/DRMPlayServer/src/DRMPlaySession.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -905,7 +905,7 @@
         }
 
     // Add custCmdAsyncAO object to array of async custom command objects
-    iActiveAsyncCustomCommands.Append( iCDRMCustomCommandAsyncAO2Phase );
+    iActiveAsyncCustomCommands.AppendL( iCDRMCustomCommandAsyncAO2Phase );
 
     // aMessage ownership is transferred to custCmdAsyncAO.
     // After succesful transfer, aMessage should not be completed
--- a/devsoundextensions/drmaudioplayer/DRMPlayUtility/group/DRMPlayUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/drmaudioplayer/DRMPlayUtility/group/DRMPlayUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -13,7 +13,7 @@
 *
 * Description:   Project file for DRM Utility
 *
-*  Version     : %version: bh1mmcf#12 %
+*  Version     : %version: bh1sosd2#13 %
 */
 
 
@@ -57,4 +57,4 @@
 LIBRARY			ecom.lib
 #endif
 
-LIBRARY		MediaClientAudio.lib
+LIBRARY		mediaclientaudio.lib
--- a/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Group/AudioEqualizerEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Group/AudioEqualizerEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,15 +35,15 @@
 
 SOURCE          AudioEqualizerBase.cpp
 
-LIBRARY         Euser.lib
-LIBRARY         Estor.lib
+LIBRARY         euser.lib
+LIBRARY         estor.lib
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
 LIBRARY         mmfdevsound.lib 
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mediaclientvideo.lib
 
 // End of file
--- a/devsoundextensions/effects/AudioEqualizer/AudioEqualizerMessageHandler/Group/AudioEqualizerMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/AudioEqualizer/AudioEqualizerMessageHandler/Group/AudioEqualizerMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		AudioEqualizerEffect.lib
--- a/devsoundextensions/effects/AudioEqualizer/AudioEqualizerProxy/Group/AudioEqualizerProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/AudioEqualizer/AudioEqualizerProxy/Group/AudioEqualizerProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SOURCE          AudioEqualizerProxy.cpp
 SOURCE		AudioEqualizerEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		AudioEqualizerEffect.lib
--- a/devsoundextensions/effects/BassBoost/BassBoostEffect/Group/BassBoostEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/BassBoost/BassBoostEffect/Group/BassBoostEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,10 +36,10 @@
 
 SOURCE          BassBoostBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/BassBoost/BassBoostMessageHandler/Group/BassBoostMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/BassBoost/BassBoostMessageHandler/Group/BassBoostMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		BassBoostEffect.lib
--- a/devsoundextensions/effects/BassBoost/BassBoostProxy/Group/BassBoostProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/BassBoost/BassBoostProxy/Group/BassBoostProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 SOURCE          BassBoostProxy.cpp
 SOURCE		BassBoostEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		BassBoostEffect.lib
--- a/devsoundextensions/effects/DistAtten/DistanceAttenuationEffect/Group/DistanceAttenuationEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/DistAtten/DistanceAttenuationEffect/Group/DistanceAttenuationEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -34,10 +34,10 @@
 
 SOURCE          DistanceAttenuationBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/DistAtten/DistanceAttenuationMessageHandler/Group/DistanceAttenuationMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/DistAtten/DistanceAttenuationMessageHandler/Group/DistanceAttenuationMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		DistanceAttenuationEffect.lib
--- a/devsoundextensions/effects/DistAtten/DistanceAttenuationProxy/Group/DistanceAttenuationProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/DistAtten/DistanceAttenuationProxy/Group/DistanceAttenuationProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 SOURCE          DistanceAttenuationProxy.cpp
 SOURCE		DistanceAttenuationEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		DistanceAttenuationEffect.lib
--- a/devsoundextensions/effects/DopplerBase/Group/DopplerBase.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/DopplerBase/Group/DopplerBase.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,7 +39,7 @@
 
 SOURCE          DopplerBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY     euser.lib  
 LIBRARY		EffectBase.lib
 LIBRARY		CustomInterfaceUtility.lib
 LIBRARY      estlib.lib
--- a/devsoundextensions/effects/EffectBase/Group/EffectBase.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/EffectBase/Group/EffectBase.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 
 SOURCE          AudioEffectBase.cpp
 
-LIBRARY         Euser.lib  
-LIBRARY		MediaClientAudio.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib  
+LIBRARY		mediaclientaudio.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 
--- a/devsoundextensions/effects/EnvReverb/EnvironmentalReverbEffect/Group/EnvironmentalReverbEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/EnvReverb/EnvironmentalReverbEffect/Group/EnvironmentalReverbEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,14 +35,14 @@
 
 SOURCE          EnvironmentalReverbBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
 LIBRARY         mmfdevsound.lib 
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mediaclientvideo.lib
 
 // End of file
--- a/devsoundextensions/effects/EnvReverb/EnvironmentalReverbMessageHandler/Group/EnvironmentalReverbMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/EnvReverb/EnvironmentalReverbMessageHandler/Group/EnvironmentalReverbMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		EnvironmentalReverbEffect.lib
--- a/devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Group/EnvironmentalReverbProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Group/EnvironmentalReverbProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 SOURCE          EnvironmentalReverbProxy.cpp
 SOURCE		EnvironmentalReverbEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		EnvironmentalReverbEffect.lib
--- a/devsoundextensions/effects/ListDoppler/ListenerDopplerEffect/Group/ListenerDopplerEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListDoppler/ListenerDopplerEffect/Group/ListenerDopplerEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,11 +36,11 @@
 SOURCE          ListenerDopplerEffect.cpp
 
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         Dopplerbase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/ListDoppler/ListenerDopplerMessageHandler/Group/ListenerDopplerMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListDoppler/ListenerDopplerMessageHandler/Group/ListenerDopplerMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,10 +38,10 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
-LIBRARY		DopplerBase.lib
+LIBRARY		Dopplerbase.lib
 LIBRARY		ListenerDopplerEffect.lib
 
--- a/devsoundextensions/effects/ListDoppler/ListenerDopplerProxy/Group/ListenerDopplerProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListDoppler/ListenerDopplerProxy/Group/ListenerDopplerProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,11 +38,11 @@
 SOURCE          ListenerDopplerProxy.cpp
 SOURCE		ListenerDopplerEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
-LIBRARY		DopplerBase.lib
+LIBRARY		Dopplerbase.lib
 LIBRARY		ListenerDopplerEffect.lib
 
 
--- a/devsoundextensions/effects/ListLocation/ListenerLocationEffect/Group/ListenerLocationEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListLocation/ListenerLocationEffect/Group/ListenerLocationEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,11 +36,11 @@
 
 SOURCE          ListenerLocationBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         LocationBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/ListLocation/ListenerLocationMessageHandler/Group/ListenerLocationMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListLocation/ListenerLocationMessageHandler/Group/ListenerLocationMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		ListenerLocationEffect.lib
--- a/devsoundextensions/effects/ListLocation/ListenerLocationProxy/Group/ListenerLocationProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListLocation/ListenerLocationProxy/Group/ListenerLocationProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 SOURCE          ListenerLocationProxy.cpp
 SOURCE		ListenerLocationEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		LocationBase.lib
--- a/devsoundextensions/effects/ListOrient/ListenerOrientationEffect/Group/ListenerOrientationEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListOrient/ListenerOrientationEffect/Group/ListenerOrientationEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,11 +35,11 @@
 
 SOURCE          ListenerOrientationBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         OrientationBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/ListOrient/ListenerOrientationMessageHandler/Group/ListenerOrientationMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListOrient/ListenerOrientationMessageHandler/Group/ListenerOrientationMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		ListenerOrientationEffect.lib
--- a/devsoundextensions/effects/ListOrient/ListenerOrientationProxy/Group/ListenerOrientationProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/ListOrient/ListenerOrientationProxy/Group/ListenerOrientationProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 SOURCE          ListenerOrientationProxy.cpp
 SOURCE		ListenerOrientationEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		OrientationBase.lib
--- a/devsoundextensions/effects/LocationBase/Group/LocationBase.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/LocationBase/Group/LocationBase.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 
 SOURCE          LocationBase.cpp
 
-LIBRARY      estlib.lib
-LIBRARY         Euser.lib
+LIBRARY     estlib.lib
+LIBRARY     euser.lib
 LIBRARY		EffectBase.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY		mmfcontrollerframework.lib
 
--- a/devsoundextensions/effects/Loudness/LoudnessEffect/Group/LoudnessEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/Loudness/LoudnessEffect/Group/LoudnessEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,10 +35,10 @@
 
 SOURCE          LoudnessBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/Loudness/LoudnessMessageHandler/Group/LoudnessMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/Loudness/LoudnessMessageHandler/Group/LoudnessMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,8 +35,8 @@
 
 OS_LAYER_SYSTEMINCLUDE
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		LoudnessEffect.lib
--- a/devsoundextensions/effects/Loudness/LoudnessProxy/Group/LoudnessProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/Loudness/LoudnessProxy/Group/LoudnessProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 SOURCE          LoudnessProxy.cpp
 SOURCE		LoudnessEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		LoudnessEffect.lib
--- a/devsoundextensions/effects/OrientationBase/Group/OrientationBase.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/OrientationBase/Group/OrientationBase.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 
 SOURCE          OrientationBase.cpp
 
-LIBRARY         Euser.lib
+LIBRARY     euser.lib
 LIBRARY		EffectBase.lib
-LIBRARY		MmfControllerFramework.lib
-LIBRARY      estlib.lib
+LIBRARY		mmfcontrollerframework.lib
+LIBRARY     estlib.lib
 
--- a/devsoundextensions/effects/RoomLevel/RoomLevelEffect/Group/RoomLevelEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/RoomLevel/RoomLevelEffect/Group/RoomLevelEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -34,13 +34,13 @@
 OS_LAYER_SYSTEMINCLUDE
 SOURCE          RoomLevelBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
 LIBRARY         EnvironmentalReverbProxy.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         EnvironmentalReverbEffect.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/RoomLevel/RoomLevelMessageHandler/Group/RoomLevelMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/RoomLevel/RoomLevelMessageHandler/Group/RoomLevelMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 
 OS_LAYER_SYSTEMINCLUDE 
 
-LIBRARY     	Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
 LIBRARY		EffectBase.lib
 LIBRARY		RoomLevelEffect.lib
--- a/devsoundextensions/effects/RoomLevel/RoomLevelProxy/Group/RoomLevelProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/RoomLevel/RoomLevelProxy/Group/RoomLevelProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SOURCE          RoomLevelProxy.cpp
 SOURCE		RoomLevelEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		RoomLevelEffect.lib
--- a/devsoundextensions/effects/SrcDoppler/SourceDopplerEffect/Group/SourceDopplerEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcDoppler/SourceDopplerEffect/Group/SourceDopplerEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -36,11 +36,11 @@
 SOURCE          SourceDopplerEffect.cpp
 
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         Dopplerbase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/SrcDoppler/SourceDopplerMessageHandler/Group/SourceDopplerMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcDoppler/SourceDopplerMessageHandler/Group/SourceDopplerMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,10 +39,10 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
-LIBRARY		DopplerBase.lib
+LIBRARY		Dopplerbase.lib
 LIBRARY		SourceDopplerEffect.lib
 
--- a/devsoundextensions/effects/SrcDoppler/SourceDopplerProxy/Group/SourceDopplerProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcDoppler/SourceDopplerProxy/Group/SourceDopplerProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,11 +38,11 @@
 SOURCE          SourceDopplerProxy.cpp
 SOURCE		SourceDopplerEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
-LIBRARY		DopplerBase.lib
+LIBRARY		Dopplerbase.lib
 LIBRARY		SourceDopplerEffect.lib
 
 
--- a/devsoundextensions/effects/SrcLocation/SourceLocationEffect/Group/SourceLocationEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcLocation/SourceLocationEffect/Group/SourceLocationEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,11 +35,11 @@
 
 SOURCE          SourceLocationBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         LocationBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/SrcLocation/SourceLocationMessageHandler/Group/SourceLocationMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcLocation/SourceLocationMessageHandler/Group/SourceLocationMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		SourceLocationEffect.lib
--- a/devsoundextensions/effects/SrcLocation/SourceLocationProxy/Group/SourceLocationProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcLocation/SourceLocationProxy/Group/SourceLocationProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SOURCE          SourceLocationProxy.cpp
 SOURCE		SourceLocationEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		LocationBase.lib
--- a/devsoundextensions/effects/SrcOrientation/SourceOrientationEffect/Group/SourceOrientationEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcOrientation/SourceOrientationEffect/Group/SourceOrientationEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,11 +35,11 @@
 
 SOURCE          SourceOrientationBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         OrientationBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
--- a/devsoundextensions/effects/SrcOrientation/SourceOrientationMessageHandler/Group/SourceOrientationMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcOrientation/SourceOrientationMessageHandler/Group/SourceOrientationMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 
 OS_LAYER_SYSTEMINCLUDE
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		SourceOrientationEffect.lib
--- a/devsoundextensions/effects/SrcOrientation/SourceOrientationProxy/Group/SourceOrientationProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/SrcOrientation/SourceOrientationProxy/Group/SourceOrientationProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SOURCE          SourceOrientationProxy.cpp
 SOURCE		SourceOrientationEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		OrientationBase.lib
--- a/devsoundextensions/effects/StereoWidening/StereoWideningEffect/Group/StereoWideningEffect.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/StereoWidening/StereoWideningEffect/Group/StereoWideningEffect.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,15 +35,15 @@
 
 SOURCE          StereoWideningBase.cpp
 
-LIBRARY         Euser.lib  
+LIBRARY         euser.lib  
 LIBRARY         EffectBase.lib
 LIBRARY         CustomInterfaceUtility.lib
-LIBRARY         DRMAudioPlayUtility.lib
+LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientaudio.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib 
 LIBRARY         mmfdevsound.lib 
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mediaclientvideo.lib
 
 // End of file
 
--- a/devsoundextensions/effects/StereoWidening/StereoWideningMessageHandler/Group/StereoWideningMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/StereoWidening/StereoWideningMessageHandler/Group/StereoWideningMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 OS_LAYER_SYSTEMINCLUDE
 
 
-LIBRARY         Euser.lib 
-LIBRARY		MmfControllerFramework.lib 
-LIBRARY		MMFDevSound.lib
+LIBRARY     euser.lib 
+LIBRARY		mmfcontrollerframework.lib 
+LIBRARY		mmfdevsound.lib
 LIBRARY		EffectBase.lib
 LIBRARY		StereoWideningEffect.lib
--- a/devsoundextensions/effects/StereoWidening/StereoWideningProxy/Group/StereoWideningProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effects/StereoWidening/StereoWideningProxy/Group/StereoWideningProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SOURCE          StereoWideningProxy.cpp
 SOURCE		StereoWideningEventObserver.cpp
 
-LIBRARY         Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY     euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		EffectBase.lib
 LIBRARY		StereoWideningEffect.lib
--- a/devsoundextensions/effectspresets/AudioEqualizerUtility/group/AudioEqualizerUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effectspresets/AudioEqualizerUtility/group/AudioEqualizerUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -45,15 +45,15 @@
 SYSTEMINCLUDE   /epoc32/include/kernel
 SYSTEMINCLUDE   /epoc32/include/mmf/common
 
-LIBRARY         EUser.lib
-LIBRARY         Estlib.lib
+LIBRARY         euser.lib
+LIBRARY         estlib.lib
 LIBRARY         centralrepository.lib
 LIBRARY         AudioEqualizerEffect.lib
 LIBRARY         BassBoostEffect.lib
 LIBRARY         EffectBase.lib
-LIBRARY         MmfControllerFramework.lib
-LIBRARY         DRMAudioPlayUtility.lib
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mmfcontrollerframework.lib
+LIBRARY         DrmAudioPlayUtility.lib
+LIBRARY         mediaclientvideo.lib
 
 //-----------------------------------------------------------------------------
 //  End of File
--- a/devsoundextensions/effectspresets/EnvironmentalReverbUtility/group/EnvironmentalReverbUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effectspresets/EnvironmentalReverbUtility/group/EnvironmentalReverbUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -44,14 +44,14 @@
 SYSTEMINCLUDE   /epoc32/include/kernel
 SYSTEMINCLUDE   /epoc32/include/mmf/common
 
-LIBRARY         EUser.lib
-LIBRARY         Estlib.lib
+LIBRARY         euser.lib
+LIBRARY         estlib.lib
 LIBRARY         centralrepository.lib
 LIBRARY         EnvironmentalReverbEffect.lib
 LIBRARY         EffectBase.lib
-LIBRARY         MmfControllerFramework.lib
-LIBRARY         DRMAudioPlayUtility.lib
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mmfcontrollerframework.lib
+LIBRARY         DrmAudioPlayUtility.lib
+LIBRARY         mediaclientvideo.lib
 
 //-----------------------------------------------------------------------------
 //  End of File
--- a/devsoundextensions/effectspresets/StereoWideningUtility/group/StereoWideningUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/effectspresets/StereoWideningUtility/group/StereoWideningUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -45,14 +45,14 @@
 SYSTEMINCLUDE   /epoc32/include/kernel
 SYSTEMINCLUDE   /epoc32/include/mmf/common
 
-LIBRARY         EUser.lib
-LIBRARY         Estlib.lib
+LIBRARY         euser.lib
+LIBRARY         estlib.lib
 LIBRARY         centralrepository.lib
 LIBRARY         StereoWideningEffect.lib
 LIBRARY         EffectBase.lib
-LIBRARY         MmfControllerFramework.lib
-LIBRARY         DRMAudioPlayUtility.lib
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mmfcontrollerframework.lib
+LIBRARY         DrmAudioPlayUtility.lib
+LIBRARY         mediaclientvideo.lib
 
 //-----------------------------------------------------------------------------
 //  End of File
--- a/devsoundextensions/globalaudiosettings/group/GlobalAudioSettings.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/globalaudiosettings/group/GlobalAudioSettings.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -39,8 +39,8 @@
 deffile         GlobalAudioSettings.def
 nostrictdef
 
-LIBRARY         EUser.lib
-LIBRARY         Estlib.lib
+LIBRARY         euser.lib
+LIBRARY         estlib.lib
 LIBRARY         centralrepository.lib
 
 //-----------------------------------------------------------------------------
--- a/devsoundextensions/mmextfw/customcommandutility/Group/CustomCommandUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmextfw/customcommandutility/Group/CustomCommandUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,10 +38,10 @@
 
 
 LIBRARY         euser.lib 
-LIBRARY         MediaClientAudio.lib 
-LIBRARY         MidiClient.lib
+LIBRARY         mediaclientaudio.lib 
+LIBRARY         midiclient.lib
 LIBRARY         DrmAudioPlayUtility.lib
-LIBRARY         MediaClientVideo.lib
+LIBRARY         mediaclientvideo.lib
 
 // End of file
 
--- a/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceBuilder/Group/CustomInterfaceBuilder.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceBuilder/Group/CustomInterfaceBuilder.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,6 +37,6 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/common /epoc32/include/mmf/server 
 
 LIBRARY         euser.lib
-LIBRARY         MmfControllerFramework.lib
-LIBRARY         MMFDevSound.lib
-LIBRARY		MessageHandlerFactory.lib
+LIBRARY         mmfcontrollerframework.lib
+LIBRARY         mmfdevsound.lib
+LIBRARY			MessageHandlerFactory.lib
--- a/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceUtility/Group/CustomInterfaceUtility.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmextfw/custominterfaceutility/CustomInterfaceUtility/Group/CustomInterfaceUtility.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -40,8 +40,8 @@
 LIBRARY         euser.lib
 LIBRARY         CustomCommandUtility.lib
 LIBRARY         CustomInterfaceProxyFactory.lib
-LIBRARY         MMFControllerFramework.lib
-LIBRARY	    	MMFDevSound.lib
+LIBRARY         mmfcontrollerframework.lib
+LIBRARY	    	mmfdevsound.lib
 LIBRARY         DrmAudioPlayUtility.lib
 LIBRARY         mediaclientvideo.lib
 
--- a/devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfig/group/AacDecoderConfig.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfig/group/AacDecoderConfig.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,7 +38,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfigMsgHdlr/Group/AacDecoderConfigMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/AacDecoderConfig/AacDecoderConfigMsgHdlr/Group/AacDecoderConfigMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         AacDecoderConfig.lib
 
--- a/devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfc/Group/EAacPlusDecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfc/Group/EAacPlusDecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,7 +38,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 //  End of File
--- a/devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfcMsgHdlr/Group/EAacPlusDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/EAacPlusDecoderIntfc/EAacPlusDecoderIntfcMsgHdlr/Group/EAacPlusDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         EAacPlusDecoderIntfc.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfc/group/ErrorConcealmentIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfc/group/ErrorConcealmentIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,8 +38,8 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
 
--- a/devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfcMsgHdlr/Group/ErrorConcealmentIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/ErrConcealmentIntfc/ErrorConcealmentIntfcMsgHdlr/Group/ErrorConcealmentIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         ErrorConcealmentIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfc/group/G711DecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfc/group/G711DecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
 
--- a/devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfcMsgHdlr/Group/G711DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G711DecoderIntfc/G711DecoderIntfcMsgHdlr/Group/G711DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         G711DecoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfc/group/G711EncoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfc/group/G711EncoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioInputStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudioinputstream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfcMsgHdlr/Group/G711EncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G711EncoderIntfc/G711EncoderIntfcMsgHdlr/Group/G711EncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         G711EncoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfc/group/G729DecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfc/group/G729DecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,8 +37,8 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
 
--- a/devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfcMsgHdlr/Group/G729DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G729DecoderIntfc/G729DecoderIntfcMsgHdlr/Group/G729DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         G729DecoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfc/group/G729EncoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfc/group/G729EncoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioInputStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudioinputstream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfcMsgHdlr/Group/G729EncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/G729EncoderIntfc/G729EncoderIntfcMsgHdlr/Group/G729EncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         G729EncoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfc/group/IlbcDecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfc/group/IlbcDecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudiostream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfcMsgHdlr/Group/IlbcDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/IlbcDecoderIntfc/IlbcDecoderIntfcMsgHdlr/Group/IlbcDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         IlbcDecoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfc/group/IlbcEncoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfc/group/IlbcEncoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioInputStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudioinputstream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfcMsgHdlr/Group/IlbcEncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/IlbcEncoderIntfc/IlbcEncoderIntfcMsgHdlr/Group/IlbcEncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         IlbcEncoderIntfc.lib
 
--- a/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfc/Group/Ra8DecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfc/Group/Ra8DecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,6 +37,6 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mmfdevsound.lib
 
 //  End of File
--- a/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcMsgHdlr/Group/Ra8DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcMsgHdlr/Group/Ra8DecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,6 +37,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 
 //  End of File
--- a/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcProxy/Group/Ra8DecoderIntfcProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/Ra8DecoderIntfc/Ra8DecoderIntfcProxy/Group/Ra8DecoderIntfcProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfc/Group/SbcEncoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfc/Group/SbcEncoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioInputStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudioinputstream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcMsgHdlr/Group/SbcEncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcMsgHdlr/Group/SbcEncoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         SbcEncoderIntfc.lib
 
 //  End of File
--- a/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcProxy/src/SbcEncoderIntfcProxy.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SbcEncoderIntfc/SbcEncoderIntfcProxy/src/SbcEncoderIntfcProxy.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -205,7 +205,7 @@
 
    	for (TInt i = 0; i < pckgBuf(); i++)
       	{
-   		aSupportedChannelModes.Append(
+   		aSupportedChannelModes.AppendL(
    		    static_cast<TSbcChannelMode>(stream.ReadUint32L()));
    		}
 
@@ -376,7 +376,7 @@
 
    	for (TInt i = 0; i < pckgBuf(); i++)
       	{
-   		aSupportedAllocationMethods.Append(
+   		aSupportedAllocationMethods.AppendL(
    		            static_cast<TSbcAllocationMethod>(stream.ReadUint32L()));
    		}
 
@@ -697,7 +697,7 @@
 
    	for (TInt i = 0; i < aCount; i++)
       	{
-   		aArray.Append(stream.ReadUint32L());
+   		aArray.AppendL(stream.ReadUint32L());
    		}
 
    	CleanupStack::PopAndDestroy(&stream);
--- a/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfig/group/SpeechEncoderConfig.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfig/group/SpeechEncoderConfig.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
 LIBRARY         euser.lib
-LIBRARY         MediaClientAudioInputStream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mediaclientaudioinputstream.lib
+LIBRARY         mmfdevsound.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigMsgHdlr/Group/SpeechEncoderConfigMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigMsgHdlr/Group/SpeechEncoderConfigMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,7 +38,7 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         SpeechEncoderConfig.lib
 
 
--- a/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigProxy/src/SpeechEncoderConfigProxy.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/SpeechEncoderConfig/SpeechEncoderConfigProxy/src/SpeechEncoderConfigProxy.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -150,7 +150,7 @@
     CleanupClosePushL(stream); // stream on cleanup
    	for (TInt i=0; i<numberOfBitratesPckg(); i++)
       	{
-   		aSupportedBitrates.Append(stream.ReadUint32L());
+   		aSupportedBitrates.AppendL(stream.ReadUint32L());
    		}
    	CleanupStack::PopAndDestroy(&stream);
    	CleanupStack::PopAndDestroy(buf);
--- a/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfc/Group/WmaDecoderIntfc.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfc/Group/WmaDecoderIntfc.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -40,6 +40,6 @@
 LIBRARY         euser.lib
 LIBRARY         mediaclientaudioinputstream.lib
 LIBRARY         mediaclientaudiostream.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mmfdevsound.lib
 
 //  End of File
--- a/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcMsgHdlr/Group/WmaDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcMsgHdlr/Group/WmaDecoderIntfcMsgHdlr.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -37,7 +37,7 @@
 
 LIBRARY         euser.lib
 LIBRARY         estor.lib
-LIBRARY         MmfControllerFramework.lib
+LIBRARY         mmfcontrollerframework.lib
 LIBRARY         WmaDecoderIntfc.lib
 
 // End of File
--- a/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcProxy/src/WmaDecoderIntfcProxy.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/mmfcustominterfaces/WmaDecoderIntfc/WmaDecoderIntfcProxy/src/WmaDecoderIntfcProxy.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -831,7 +831,7 @@
     CleanupClosePushL(stream); // stream on cleanup
    	for (TInt i=0; i<supportedFormatsPkg(); i++)
     	{
-   		aSupportedFormats.Append(static_cast<TFormat>(stream.ReadUint32L()));
+   		aSupportedFormats.AppendL(static_cast<TFormat>(stream.ReadUint32L()));
    		}
    	CleanupStack::PopAndDestroy(&stream);
    	CleanupStack::PopAndDestroy(buf);    			
@@ -874,7 +874,7 @@
 	CleanupClosePushL(stream); // stream on cleanup
 	for (TInt i=0; i<supportedToolsPkg(); i++)
 		{
-		aSupportedTools.Append(static_cast<TTool>(stream.ReadUint32L()));
+		aSupportedTools.AppendL(static_cast<TTool>(stream.ReadUint32L()));
 		}
 	CleanupStack::PopAndDestroy(&stream);
 	CleanupStack::PopAndDestroy(buf);
@@ -918,7 +918,7 @@
     CleanupClosePushL(stream); // stream on cleanup
    	for (TInt i=0; i < numPckg(); i++)
     	{
-   		aControllableTools.Append(static_cast<TTool>(stream.ReadUint32L()));
+   		aControllableTools.AppendL(static_cast<TTool>(stream.ReadUint32L()));
    		}
    	CleanupStack::PopAndDestroy(&stream);
    	CleanupStack::PopAndDestroy(buf);
--- a/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputBase/group/RestrictedAudioOutput.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputBase/group/RestrictedAudioOutput.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -42,6 +42,6 @@
 
 LIBRARY         euser.lib
 LIBRARY         CustomCommandUtility.lib
-LIBRARY         MMFDevSound.lib
+LIBRARY         mmfdevsound.lib
 
 // End of file
--- a/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputMessageHandler/Group/RestrictedAudioOutputMessageHandler.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputMessageHandler/Group/RestrictedAudioOutputMessageHandler.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -40,7 +40,7 @@
 
 
 LIBRARY         euser.lib 
-LIBRARY			MmfControllerFramework.lib
+LIBRARY			mmfcontrollerframework.lib
 LIBRARY			RestrictedAudioOutput.lib
 
 
--- a/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputProxy/Group/RestrictedAudioOutputProxy.mmp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputProxy/Group/RestrictedAudioOutputProxy.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -35,9 +35,9 @@
 SYSTEMINCLUDE   /epoc32/include/mmf/common 
 SYSTEMINCLUDE   /epoc32/include/mmf/server
 
-LIBRARY    	Euser.lib
-LIBRARY		MmfControllerFramework.lib
+LIBRARY    	euser.lib
+LIBRARY		mmfcontrollerframework.lib
 LIBRARY		CustomCommandUtility.lib
 LIBRARY		RestrictedAudioOutput.lib
-LIBRARY     MMFDevSound.lib
+LIBRARY     mmfdevsound.lib
 
--- a/devsoundextensions/telephonyaudiorouting/Server/src/TelephonyAudioRoutingServer.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/devsoundextensions/telephonyaudiorouting/Server/src/TelephonyAudioRoutingServer.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -209,7 +209,7 @@
    	iShowNoteMode = showNotePkg();	
 	TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingServer::DoSetOutputL ShowNoteMode Value Sent to server = %d"), iShowNoteMode);    	
    	
-	iSetOutputRequests.Append(aSessionId);
+	iSetOutputRequests.AppendL(aSessionId);
 	
 	// Verify requested audio change exists in available outputs (unless is ENone or ENotActive)	
 	if ( (response != CTelephonyAudioRouting::ENone) && (response != CTelephonyAudioRouting::ENotActive))
--- a/layers.sysdef.xml	Thu Sep 16 18:39:58 2010 +0100
+++ b/layers.sysdef.xml	Thu Sep 16 18:57:38 2010 +0100
@@ -52,7 +52,7 @@
 			
   	<layer name="os_mm_mdfdevvideoextensions_layer">
 			<module name="mm_mdfdevvideoextensions">
-				<unit unitID="mm_mdfdevvideoextensions" mrp="" bldFile="&layer_real_source_path;/mdfdevvideoextensions/nga_mdf_postprocessor/group" name="mm_mdfdevvideoextensions" />
+				<unit unitID="mm_mdfdevvideoextensions" mrp="" bldFile="&layer_real_source_path;/mdfdevvideoextensions/group" name="mm_mdfdevvideoextensions" />
 			</module>
    	 </layer>    
   </systemModel>
--- a/mdfdevvideoextensions/group/bld.inf	Thu Sep 16 18:39:58 2010 +0100
+++ b/mdfdevvideoextensions/group/bld.inf	Thu Sep 16 18:57:38 2010 +0100
@@ -15,13 +15,18 @@
 *
 */
 
+#include <feature_settings.hrh>
+
 PRJ_PLATFORMS
 DEFAULT
 
 PRJ_EXPORTS
 
 PRJ_MMPFILES
+#ifdef NCP_COMMON_OMXIL_SHAI_SUPPORT_ENABLED
+#include "../nga_mdf_postprocessor_shai/group/bld.inf"
+#else
 #include "../nga_mdf_postprocessor/group/bld.inf"
-
+#endif
 //  End of File  
 
--- a/mdfdevvideoextensions/nga_mdf_postprocessor/group/bld.inf	Thu Sep 16 18:39:58 2010 +0100
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor/group/bld.inf	Thu Sep 16 18:57:38 2010 +0100
@@ -17,15 +17,19 @@
 
 
 #include <platform_paths.hrh>
+#include <feature_settings.hrh>
 
 PRJ_PLATFORMS
 WINSCW ARMV5
 
 PRJ_MMPFILES
+#ifndef NCP_COMMON_OMXIL_SHAI_SUPPORT_ENABLED
 NGAPostProcHwDevice.mmp
+#endif
 
 PRJ_EXPORTS
-
+#ifndef NCP_COMMON_OMXIL_SHAI_SUPPORT_ENABLED
 ../rom/NGA_MDF_Postprocessor.iby     CORE_OS_LAYER_IBY_EXPORT_PATH(NGA_MDF_Postprocessor.iby)
 ../data/nga_mdf_postprocessor_stub.sis   /epoc32/data/z/system/install/nga_mdf_postprocessor_stub.sis
+#endif
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/data/nga_mdf_postprocessor_stub.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,30 @@
+;
+; Copyright (c) 2008 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:  Package file for project NGA MDF PostProcessor
+;
+
+; nga_mdf_postprocessor.pkg
+;
+; Languages
+&EN
+
+; Header
+#{"NGA MDF PostProcessor"},(0x0251318C), 1, 0, 0, TYPE=SA
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
Binary file mdfdevvideoextensions/nga_mdf_postprocessor_shai/data/nga_mdf_postprocessor_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/NGAPostProcHwDevice.mmp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+#include "../inc/NGAPostProcHwDevice_UID.hrh"
+
+TARGET          NGAPostProcHwDevice110.dll
+
+TARGETTYPE      PLUGIN
+
+//MACRO DISPLAY_POSTING_API
+#if defined(MARM_ARMV5) || defined(ARM9E) 
+ALWAYS_BUILD_AS_ARM
+MACRO ARM_V5E
+OPTION_REPLACE ARMCC --cpu ARM9E
+#endif
+
+
+UID             0x10009D8D KUidNGAPostProcHwDeviceDllUid 
+
+VENDORID        VID_DEFAULT
+CAPABILITY      CAP_ECOM_PLUGIN
+
+SOURCEPATH      ../src
+
+SOURCE			Colorspace_conv_yuv.c
+SOURCE			colorconversion.c
+SOURCE          NGAPostProcHwDevice.cpp
+SOURCE          ImplementationProxy.cpp
+SOURCE          NGAPostProcSessionManager.cpp
+SOURCE          NGAPostProcSurfaceHandler.cpp
+SOURCE          NGAPostProcNotifier.cpp
+
+#ifdef   _DUMP_YUV_FRAMES
+SOURCE			myfopen.c
+#endif
+
+START RESOURCE  200195AF.rss
+TARGET NGAPostProcHwDevice110.rsc
+END
+
+USERINCLUDE     ../inc
+
+
+OS_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   /epoc32/include/libc
+
+
+
+LIBRARY         euser.lib 
+LIBRARY         surfaceupdateclient.lib
+LIBRARY         surfacemanager.lib
+LIBRARY         fbscli.lib bitgdi.lib
+LIBRARY         devvideo.lib 
+LIBRARY         hal.lib ws32.lib 
+LIBRARY 		efsrv.lib efile.lib estlib.lib
+LIBRARY 		Flogger.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/bld.inf	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <feature_settings.hrh>
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_MMPFILES
+#ifdef NCP_COMMON_OMXIL_SHAI_SUPPORT_ENABLED
+NGAPostProcHwDevice.mmp
+#endif
+
+PRJ_EXPORTS
+#ifdef NCP_COMMON_OMXIL_SHAI_SUPPORT_ENABLED
+../rom/NGA_MDF_Postprocessor.iby     CORE_OS_LAYER_IBY_EXPORT_PATH(NGA_MDF_Postprocessor.iby)
+../data/nga_mdf_postprocessor_stub.sis   /epoc32/data/z/system/install/nga_mdf_postprocessor_stub.sis
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/group/nga_mdf_postprocessor.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2008 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:  Package file for project NGA MDF PostProcessor
+;
+
+; nga_mdf_postprocessor.pkg
+;
+; Languages
+&EN
+
+; Header
+#{"NGA MDF PostProcessor"},(0x0251318C), 1, 0, 0, TYPE=SA,RU
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+"\epoc32\release\armv5\urel\NGAPostProcHwDevice110.dll"-"!:\sys\bin\NGAPostProcHwDevice110.dll"
+
+"\epoc32\data\z\resource\plugins\NGAPostProcHwDevice110.RSC"-"!:\resource\plugins\NGAPostProcHwDevice110.RSC"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/Colorconversion.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,774 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#include "common.h"
+
+#define CONST_19075		19075
+#define CONST_26748		26748
+#define CONST_6563		6563
+#define CONST_13621		13621
+#define CONST_33802		33802
+#define CONST_29374		29374
+#define CONST_8731		8731
+#define CONST_1747		1747
+#define CONST_34603		34603
+#define CONST_22973		22973
+#define CONST_5637		5637
+#define CONST_11699		11699
+#define CONST_29032		29032
+#define CONST_25801		25801
+#define CONST_3835		3835
+#define CONST_30397		30397
+
+
+/************* Start of Chroma2 format ******************************************/
+
+/* For YUV420 Chroma2 input */
+// For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV420Chr2toColor16M_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16M_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16M_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16M_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV420Chr2toColor16MU_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16MU_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16MU_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr2toColor16MU_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/* End of YUV420 input */
+
+
+
+
+/* Start of YUV422 Chroma2 BE (U1 Y1 V1 Y2) input */
+// For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV422BEChr2toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV422BEChr2toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/* End of YUV422 Chroma2 BE (U1 Y1 V1 Y2) input */
+
+
+/* Start of YUV422 Chr2 LE (Y2 V1 Y1 U1) input */
+// For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV422LEChr2toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV422LEChr2toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/* End of YUV422 Chr2 LE (Y2 V1 Y1 U1) input */
+
+
+void sDiffuse(int32 i, int32 j, int32 diff, int32 actWidth, int32 actHeight,
+			  uint8 *lLumPtr, int32 lLumWidth, uint8 skip);
+
+/************* End of Chroma2 format ********************************************/
+
+
+/************* Start of Chroma1 format ******************************************/
+
+/* For YUV420 Chroma1 input */
+//For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV420Chr1toColor16M_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16M_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16M_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16M_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+//For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV420Chr1toColor16MU_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16MU_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16MU_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr1toColor16MU_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/* For YUV422 BE Chroma1 input */
+//For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV422BEChr1toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV422BEChr1toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/* For YUV422 LE Chroma1 input */
+//For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV422LEChr1toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV422LEChr1toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/************* End of Chroma1 format ********************************************/
+
+
+
+/************* Start of Chroma3 format ******************************************/
+
+/* For YUV420 Chroma3 input */
+// For RGB 5:6:5 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 4:4:4:4 Ordered and Error Diffusion
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For RGB 8:8:8
+void sEmz_VDec_YUV420Chr3toColor16M_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16M_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16M_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16M_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+// For XRGB 8:8:8:8
+void sEmz_VDec_YUV420Chr3toColor16MU_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16MU_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16MU_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+void sEmz_VDec_YUV420Chr3toColor16MU_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow);
+
+/************* End of Chroma3 format ******************************************/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/MdfRDebug.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008 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 __MDF_RDEBUG_H__
+#define __MDF_RDEBUG_H__
+
+#include <e32svr.h>
+#include <e32def.h>
+#include <flogger.h>
+
+#ifdef _DEBUG
+        #define PP_DEBUG RDebug::Print
+#else
+        #define PP_DEBUG 
+#endif
+
+#endif // __MDF_RDEBUG_H__ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcHwDevice.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,1161 @@
+/*
+* Copyright (c) 2008 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 __NGAPOSTPROCHWDEVICE_H__
+#define __NGAPOSTPROCHWDEVICE_H__
+
+#include <e32std.h> 
+#include <w32std.h>
+#include <e32base.h>
+#include <e32def.h>
+#include <e32cmn.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <mmf/devvideo/videoplayhwdevice.h>
+#include <mmf/devvideo/devvideostandardcustominterfaces.h>
+#include <mmf/devvideo/devvideovideosurfacecustominterface.h>
+#include <graphics/surfacemanager.h> //RSurfaceManager
+#include <graphics/surface.h> //TSurfaceId
+#include <mmf/common/mmfvideo.h> //TVideoAspectRatio
+//TBC++
+//#include <mmf/devvideo/devvideosurfacehandlecustominterface.h>
+#include "devvideosurfacehandlecustominterface.h"
+#include "postinitializeci.h"
+//TBC--
+#include <mmf/devvideo/devvideoplayratecustominterface.h>  
+#include <surface_hints.h>
+#include <secureoutputci.h>
+#include <advancedsecureoutputci.h>
+#include <graphics/suerror.h>
+
+#include "fetchframecustominterface.h"
+#include "MdfRDebug.h"
+#include "NGAPostProcHwDevice_UID.hrh"
+#include "NGAPostProcSessionManagerObserver.h"
+#include "common.h"
+
+class CNGAPostProcSessionManager;
+class CNGAPostProcSurfaceHandler;
+class CNGAPostProcTimer;
+class RWsSession;
+
+class CNGAPostProcHwDevice: public CMMFVideoPostProcHwDevice,
+							public MMmfVideoBufferManagement,
+							public MNGAPostProcSessionManagerObserver,
+							public MMMFVideoSurfaceSupport,
+							public MMmfVideoPropertiesObserver,
+							public MMmfVideoResourceObserver,
+							public MMmfVideoSurfaceHandleControl,
+							public MMmfVideoPropertiesNotifier,
+							public MMmfVideoPlayRateControl,
+							public MMmfVideoSecureOutput,
+							public MMmfAdvancedVideoSecureOutput,
+							public MMmfPostInitializeRequest
+{
+
+public: 
+    //  === Constructors and destructor ===
+    /**
+    * Two-phased constructor.   
+    * @return pointer to an instance of CMMFVideoPostProcHwDevice
+    */
+    static CMMFVideoPostProcHwDevice* NewL();
+
+    /**
+    * Destructor.
+    */
+    ~CNGAPostProcHwDevice();
+
+public: 
+    
+    // === CMMFVideoPostProcHwDevice ===
+    
+    /**
+    Sets the device input format to an uncompressed video format.
+
+    @param  "aFormat"   "The input format to use."
+    @leave  "The method will leave if an error occurs. Typical error codes used:
+            * KErrNotSupported - The input format is not supported."    
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    void SetInputFormatL(const TUncompressedVideoFormat& aFormat);
+
+    /**
+    Sets the decoder device that will write data to this post-processor. Decoded pictures will be 
+    written with WritePictureL() or through a custom interface. After pictures have been processed, 
+    they must be returned to the decoder using ReturnPicture().
+
+    @param  "aDevice"   "The decoder source plug-in to use."
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    void SetInputDevice(CMMFVideoDecodeHwDevice* aDevice);
+
+    /**
+    Writes an uncompressed video picture to the post-processor. The picture must be returned to the 
+    client or source plug-in after it has been used.
+
+    @param  "aPicture"  "The picture to write."
+    @leave  "This method may leave with one of the system-wide error codes."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void WritePictureL(TVideoPicture* aPicture);    
+
+    /**
+    Retrieves post-processing information about this hardware device. 
+    The device creates a CPostProcessorInfo structure, fills it with correct data, pushes it 
+    to the cleanup stack and returns it. The client will delete the object when it is no 
+    longer needed.
+
+    @return "Post-processor information as a CPostProcessorInfo object. 
+            The object is pushed to the cleanup stack, and must be deallocated by the caller."
+    @leave  "This method may leave with one of the system-wide error codes.
+    */
+    CPostProcessorInfo* PostProcessorInfoLC();
+
+    /**
+    Retrieves the list of the output formats that the device supports. The list is ordered in 
+    plug-in preference order, with the preferred formats at the beginning of the list. The list 
+    can depend on the device source format, and therefore SetSourceFormatL() must be called before 
+    calling this method.
+
+    @param "aFormats" "An array for the result format list. The array must be created and destroyed by the caller."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method may only be called before the hwdevice has been initialized using Initialize()."
+    */
+    void GetOutputFormatListL(RArray<TUncompressedVideoFormat>& aFormats);
+
+    /**
+    Sets the device output format.
+
+    @param  "aFormat" "The format to use."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method may only be called before the hwdevice has been initialized using Initialize()."
+    */
+    void SetOutputFormatL(const TUncompressedVideoFormat &aFormat);
+
+    /**
+    Sets the clock source to use for video timing. If no clock source is set. video playback 
+    will not be synchronized, but will proceed as fast as possible, depending on input data 
+    and output buffer availability. 
+
+    @param  "aClock" "The clock source to be used."
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    void SetClockSource(MMMFClockSource* aClock);
+
+    /**
+    Sets the device video output destination. The destination can be the screen (using direct 
+    screen access) or memory buffers. By default memory buffers are used. If data is written 
+    to another device, this method is ignored, and suitable memory buffers are always used.
+    
+    @param  "aScreen" "True if video output destination is the screen, false if memory buffers."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    void SetVideoDestScreenL(TBool aScreen);
+
+    /**
+    Sets the post-processing types to be used.
+
+    @param  "aPostProcCombination" "The post-processing steps to perform, a bitwise OR of values from TPostProcessType."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetPostProcessTypesL(TUint32 aPostProcCombination);
+
+    /**
+    Sets post-processing options for input (pan-scan) cropping.
+
+    @param  "aRect" "The cropping rectangle to use."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetInputCropOptionsL(const TRect& aRect);
+
+    /**
+    Sets post-processing options for YUV to RGB color space conversion. 
+    Specifies the input YUV and output RGB formats to use explicitly. SetSourceFormatL(), 
+    SetOutputFormatL(), and SetPostProcessTypesL() must be called before this method is used.
+
+    @param  "aOptions"      "The conversion options to use."
+    @param  "aYuvFormat"    "Conversion source YUV format"
+    @param  "aRgbFormat"    "Conversion target RGB format"
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions, const TYuvFormat& aYuvFormat, 
+                                TRgbFormat aRgbFormat);
+
+    /**
+    Sets post-processing options for YUV to RGB color space conversion.
+    Uses the device input and output formats. For decoder devices the default YUV format used is 
+    the format specified in the input bitstream. SetSourceFormatL(), SetOutputFormatL(), and 
+    SetPostProcessTypesL() must be called before this method is used.
+
+    @param  "aOptions"      "The conversion options to use."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions);
+
+    /**
+    Sets post-processing options for rotation. SetPostProcessTypesL() must be called before 
+    this method is used.
+
+    @param  "aRotationType" "The rotation to perform."  
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetRotateOptionsL(TRotationType aRotationType);
+
+    /**
+    Sets post-processing options for scaling. SetPostProcessTypesL() must be called before 
+    this method is used.
+    
+    @param  "aTargetSize"           "Scaling target size. If a fixed scale factor size is used, 
+                                    the new dimensions must be set to width=floor(factor*width), 
+                                    height=floor(factor*height). For example, scaling a 
+                                    QCIF (176x144) picture up by a factor of 4/3 yields a size 
+                                    of 234x192."
+    @param  "aAntiAliasFiltering"   "True if anti-aliasing filtering should be used. 
+                                    If the post-processor does not support anti-aliased scaling, 
+                                    or supports anti-aliased scaling only, this argument is ignored."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetScaleOptionsL(const TSize& aTargetSize, TBool aAntiAliasFiltering);
+
+    /**
+    Sets post-processing options for output cropping. SetPostProcessTypesL() must be called before 
+    this method is used.
+    
+    @param  "aRect" "Output cropping area."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetOutputCropOptionsL(const TRect& aRect);
+
+    /**
+    Sets post-processing plug-in specific options. SetPostProcessTypesL() must be called before 
+    this method is used.
+
+    @param  "aOptions" "The options. The format is plug-in specific."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can be called either before or after the hwdevice has been initialized with Initialize().
+            If called after initialization, the change must only be committed when CommitL() is called."
+    */
+    void SetPostProcSpecificOptionsL(const TDesC8& aOptions);
+
+    /**
+    Initializes the device. This method is asynchronous, the device will call 
+    MMFVideoPlayProxy::MdvppInitializeComplete() after initialization has completed. After this 
+    method has successfully completed, further configuration changes are not possible except where 
+    separately noted.
+    */
+    void Initialize();
+
+    /**
+    Commit all changes since the last CommitL(), Revert() or Initialize()
+    to the hardware device.  This only applies to methods which can be called both
+    before AND after DevVideoPlay has been initialized.
+
+    @see    SetPostProcessTypesL
+    @see    SetInputCropOptionsL
+    @see    SetYuvToRgbOptionsL
+    @see    SetRotateOptionsL
+    @see    SetScaleOptionsL
+    @see    SetOutputCropOptionsL
+    @see    SetPostProcSpecificOptionsL
+
+    @leave  "The method will leave if an error occurs."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void CommitL();
+
+    /**
+    Revert all changes since the last CommitL(), Revert() or Initialize()
+    back to their previous settings.  This only applies to methods which can 
+    be called both before AND after DevVideoPlay has been initialized.
+
+    @see    SetPostProcessTypesL
+    @see    SetInputCropOptionsL
+    @see    SetYuvToRgbOptionsL
+    @see    SetRotateOptionsL
+    @see    SetScaleOptionsL
+    @see    SetOutputCropOptionsL
+    @see    SetPostProcSpecificOptionsL
+
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Revert();
+
+    /**
+    Starts writing output directly to the display frame buffer using Direct Screen Access.
+
+    @param  "aVideoRect"    "The video output rectangle on screen."
+    @param  "aScreenDevice" "The screen device to use. The screen device object must be valid in the current thread."
+    @param  "aClipRegion"   "Initial clipping region to use."
+    
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void StartDirectScreenAccessL(const TRect& aVideoRect, 
+        CFbsScreenDevice& aScreenDevice, const TRegion& aClipRegion);
+
+    /**
+    Sets a new clipping region for Direct Screen Access. After the method returns, no video will 
+    be drawn outside of the region. If clipping is not supported, or the clipping region is too 
+    complex, either playback will pause or will resume without video display, depending on the 
+    current setting of SetPauseOnClipFail(), and the result can be verified with IsPlaying(). 
+    Clipping can be disabled by setting a new clipping region that includes the whole video window.
+
+    @param  "aRegion" "The new clipping region. After the method returns, no video will be drawn outside the region."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void SetScreenClipRegion(const TRegion& aRegion);
+
+    /**
+    Sets whether the system should pause playback when it gets a clipping region it cannot handle, 
+    or Direct Screen Access is aborted completely. If not, processing will proceed normally, but no 
+    video will be drawn. By default, playback is paused.
+
+    @param "aPause" "True if playback should be paused when clipping fails, false if not. 
+                    If playback is not paused, it will be continued without video display."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void SetPauseOnClipFail(TBool aPause);
+
+    /**
+    Aborts Direct Screen Access completely, to be called from MAbortDirectScreenAccess::AbortNow() 
+    and similar methods. DSA can be resumed by calling StartDirectScreenAccessL().
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void AbortDirectScreenAccess();
+
+    /**
+    Indicates whether playback is proceeding. This method can be used to check whether playback was 
+    paused or not in response to a new clipping region or DSA abort.
+
+    @return "ETrue if video is still being played (even if not necessarily displayed)."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    TBool IsPlaying();
+
+    /**
+    Re-draws the latest video picture. Only available when DSA is being used. If DSA is aborted or a 
+    non-supported clipping region has been set, the request may be ignored.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Redraw();
+
+
+    /**
+    Starts video playback, including decoding, post-processing, and rendering. Playback will proceed 
+    until it has been stopped or paused, or the end of the bitstream is reached.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Start();
+
+    /**
+    Stops video playback. No new pictures will be decoded, post-processed, or rendered.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Stop();
+
+    /**
+    Pauses video playback, including decoding, post-processing, and rendering. No pictures will be 
+    decoded, post-processed, or rendered until playback has been resumed.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Pause();
+
+    /**
+    Resumes video playback after a pause.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void Resume();
+
+    /**
+    Changes to a new decoding and playback position, used for randomly accessing (seeking) the 
+    input stream. The position change flushes all input and output buffers. Pre-decoder and 
+    post-decoder buffering are handled as if a new bitstream was being decoded. If the device still
+    has buffered pictures that precede the new playback position, they will be discarded. If playback
+    is synchronized to a clock source, the client is responsible for setting the clock source to the 
+    new position.
+    
+    @param "aPlaybackPosition" "The new playback position in the video stream."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void SetPosition(const TTimeIntervalMicroSeconds& aPlaybackPosition);
+
+    /**
+    Freezes a picture on the screen. After the picture has been frozen, no new pictures are 
+    displayed until the freeze is released with ReleaseFreeze(). If the device output is being 
+    written to memory buffers or to another plug-in, instead of the screen, no decoded pictures 
+    will be delivered while the freeze is active, and they are simply discarded.
+
+    @param "aTimestamp" "The presentation timestamp of the picture to freeze. The frozen picture 
+                        will be the first picture with a timestamp greater than or equal to this 
+                        parameter."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void FreezePicture(const TTimeIntervalMicroSeconds& aTimestamp);
+
+    /**
+    Releases a picture frozen with FreezePicture().
+
+    @param "aTimestamp" "The presentation timestamp of the picture to release. The first picture 
+                        displayed after the release will be the first picture with a timestamp 
+                        greater than or equal to this parameter. To release the freeze immediately, 
+                        set the timestamp to zero."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void ReleaseFreeze(const TTimeIntervalMicroSeconds& aTimestamp);
+
+
+    /**
+    Returns the current playback position, i.e. the timestamp for the most recently displayed or 
+    virtually displayed picture. If the device output is written to another device, the most recent 
+    output picture is used.
+
+    @return "Current playback position."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    TTimeIntervalMicroSeconds PlaybackPosition();
+
+    /**
+    Returns the total amount of memory allocated for uncompressed pictures. This figure only 
+    includes the pictures actually allocated by the plug-in itself, so that the total number of 
+    bytes allocated in the system can be calculated by taking the sum of the values from all plug-ins.
+
+    @return "Total number of bytes of memory allocated for uncompressed pictures."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    TUint PictureBufferBytes();
+
+    /**
+    Reads various counters related to decoded pictures. The counters are reset when Initialize() 
+    or this method is called, and thus they only include pictures processed since the last call.
+
+    Post-processor devices return the number of input pictures in iPicturesDecoded and 
+    iTotalPictures. If the decoded pictures are written to another plug-in, they are considered 
+    to be "virtually displayed".
+
+    @param "aCounters" "The counter structure to fill."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void GetPictureCounters(CMMFDevVideoPlay::TPictureCounters& aCounters);
+
+
+    /**
+    Sets the computational complexity level to use. If separate complexity levels are not available, 
+    the method call is ignored. If the level specified is not available, the results are undefined. 
+    Typically the device will either ignore the request or use the nearest suitable level.
+
+    The complexity level can be changed at any point during playback.
+
+    @param "aLevel" "The computational complexity level to use. Level zero (0) is the most complex 
+                    one, with the highest quality. Higher level numbers require less processing 
+                    and may have lower quality."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void SetComplexityLevel(TUint aLevel);
+
+    /**
+    Gets the number of complexity levels available.
+    
+    @return "The number of complexity control levels available, or zero if the information is not 
+            available yet. The information may not be available if the number of levels depends on 
+            the input data, and enough input data has not been read yet. In that case, using level 
+            zero is safe."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    TUint NumComplexityLevels();
+
+    /**
+    Gets information about a computational complexity level. This method can be called after 
+    NumComplexityLevels() has returned a non-zero value - at that point the information is guaranteed 
+    to be available. Some hardware device implementations may not be able to provide all values, 
+    in that case the values will be approximated.
+
+    @param "aLevel" "The computational complexity level to query. The level numbers range from zero 
+                    (the most complex) to NumComplexityLevels()-1."
+    @param "aInfo"  "The information structure to fill."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void GetComplexityLevelInfo(TUint aLevel, CMMFDevVideoPlay::TComplexityLevelInfo& aInfo);
+
+    /**
+    Returns a picture back to the device. This method is called by CMMFDevVideoPlay to return pictures 
+    from the client (after they have been written with NewPicture()), or by the output device when 
+    it has finished using a picture.
+
+    @param "aPicture" "The picture to return. The device can re-use the memory for the picture."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void ReturnPicture(TVideoPicture* aPicture);
+
+    /**
+    Gets a copy of the latest picture sent to output.
+
+    @param "aPictureData"   "Target picture. The memory for the picture must be allocated by the 
+                            caller, and initialized properly. The data formats must match the snapshot 
+                            format requested."
+    @param "aFormat"        "The picture format to use for the snapshot."
+
+    @return "ETrue if the snapshot was taken, EFalse if a picture is not available. The picture may not 
+            be available if decoding has not progressed far enough yet."
+
+    @leave  "The method will leave if an error occurs. Typical error codes used:
+            * KErrNotSupported - The requested data format or picture size is not supported, or the 
+            plug-in does not support snapshots."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+//  TBool GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& aFormat) {return EFalse;};
+    TBool GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& aFormat);
+
+    /**
+    When the snapshot is available, it will be returned to the client using the TimedSnapshotComplete()
+    callback. To cancel a timed snapshot request, use CancelTimedSnapshot(). Only one timed snapshot 
+    request can be active at a time.
+
+    @param "aPictureData"           "Target picture. The memory for the picture must be allocated by 
+                                    the caller, and initialized properly. The data formats must match 
+                                    the snapshot format requested. The picture must remain valid until 
+                                    the snapshot has been taken or until the request has been cancelled 
+                                    with CancelTimedSnapshot()."
+    @param "aFormat"                "The picture format to use for the snapshot."
+    @param "aPresentationTimestamp" "Presentation timestamp for the picture to copy."
+
+    @leave  "The method will leave if an error occurs. Typical error codes used:
+            * KErrNotSupported - The requested data format or picture size is not supported or 
+            the plug-in does not support timed snapshots."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    //void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, 
+    //                        const TTimeIntervalMicroSeconds& aPresentationTimestamp){};
+    void GetTimedSnapshotL(TPictureData*, const TUncompressedVideoFormat&, const TTimeIntervalMicroSeconds&){};
+
+
+    /**
+    When the snapshot is available, it will be returned to the client using the TimedSnapshotComplete()
+    callback. To cancel a timed snapshot request, use CancelTimedSnapshot(). Only one timed snapshot 
+    request can be active at a time.
+
+    @param "aPictureData"           "Target picture. The memory for the picture must be allocated by 
+                                    the caller, and initialized properly. The data formats must match 
+                                    the snapshot format requested. The picture must remain valid until 
+                                    the snapshot has been taken or until the request has been cancelled 
+                                    with CancelTimedSnapshot()."
+    @param "aFormat"                "The picture format to use for the snapshot."
+    @param "aPictureId"             "Picture identifier for the picture to copy."
+
+    @leave  "The method will leave if an error occurs. Typical error codes used:
+            * KErrNotSupported - The requested data format or picture size is not supported or 
+            the plug-in does not support timed snapshots."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+//    void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, 
+//                            const TPictureId& aPictureId){};
+    void GetTimedSnapshotL(TPictureData*, const TUncompressedVideoFormat&, const TPictureId& ){};
+
+    /**
+    Cancels a timed snapshot request.
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void CancelTimedSnapshot(){};
+
+    /**
+    Gets a list of the supported snapshot picture formats.
+
+    @param "aFormats" "An array for the result format list. The array must be created and destroyed by 
+    the caller."
+
+    @leave "This method may leave with one of the standard error codes."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void GetSupportedSnapshotFormatsL(RArray<TUncompressedVideoFormat>&){};
+
+
+    /**
+
+    Notifies the hardware device that the end of input data has been reached and no more input data 
+    will be written. The hardware device can use this signal to ensure that the remaining data gets 
+    processed, without waiting for new data. For example when the data type is not EDuCodedPicture,
+    calling this method is necessary otherwise a hardware device implementation might be looking for 
+    the start code for the next picture to ensure it has a complete picture before starting to decode
+    the previous one. 
+    
+      
+    After the remaining data has been processed (and displayed, if applicable), the hardware 
+    device must notify the proxy with the MdvppStreamEnd() callback.
+
+    DevVideo clients are encouraged to call this method, but its use is not mandatory for synchronized
+    processing.  For synchronized playback, all video pictures are processed or discarded according to 
+    their timestamps, and so the client can easily infer when processing is complete.  However, it 
+    should be noted that the last picture might not be displayed if this method is not called and the 
+    input data type is not EDuCodedPicture.
+
+    For non-synchronized playback (e.g. file conversion), a client must call this method otherwise it
+    will never find out when the hardware device has finished processing the data.
+    
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    void InputEnd();
+
+    /**
+    Retrieves a custom interface to the device.
+    @param  "aInterface"    "Interface UID, defined with the custom interface."
+    @return "Pointer to the interface implementation, or NULL if the device does not 
+            implement the interface requested. The return value must be cast to the 
+            correct type by the user."
+    */
+    TAny* CustomInterface(TUid aInterface);  
+    
+    // === MNGAPostProcSessionManagerObserver ===
+    /**
+    Set the proxy implementation to be used. Called just after the object is constructed.
+    @param  "aProxy"    "The proxy to use."
+    */
+    void BufferAvailable(TInt aBufId, TInt aStatus);
+    
+public: 
+
+    // === MMmfVideoBufferManagement ===
+    
+    /** 
+     * Sets the observer object to use. The observer gets notified
+     * when new buffers are available and when buffers need to be
+     * released back to the media device.
+     *
+     * This method can only be called before the media device has
+     * been Initialized with InitializeL().
+     * 
+     * @param aObserver The observer object to use.
+     */
+    void MmvbmSetObserver(MMmfVideoBufferManagementObserver* aObserver);
+    
+    /** 
+     * Enables input buffer management mode. In buffer management mode
+     * the target media device allocates memory for input buffers and
+     * the client can only use input buffers allocated with
+     * MmvbmGetBufferL().
+     *
+     * This method can only be called before the media device has been
+     * Initialized with InitializeL(). This method must be called if
+     * the client uses MmvbmGetBufferL().
+     * 
+     * @param aEnable ETrue if input buffer management mode is used.
+     */
+    void MmvbmEnable(TBool aEnable);
+    
+    /** 
+     * Sets the buffer options to use. The client can request the
+     * number of input buffers that should be available, but typically
+     * only few (one or two) buffers can be used.
+     *
+     * This method can only be called before the media device has been
+     * Initialized with InitializeL().
+     * 
+     * @param aOptions The buffer options to use, see TBufferOptions.
+     *
+     * @leave KErrNotSupported The requested buffer options are not
+     *   supported. Typically the client has requested too many input
+     *   buffers.
+     */
+    void MmvbmSetBufferOptionsL(const TBufferOptions& aOptions);
+    
+    /** 
+     * Gets the buffer options currently in use.
+     *
+     * This method can only be called before the media device has been
+     * Initialized with InitializeL().
+     * 
+     * @param aOptions Target buffer options data structure.
+     */
+    void MmvbmGetBufferOptions(TBufferOptions& aOptions);
+    
+    /** 
+     * Gets a new input picture buffer. The client can then write data
+     * into the buffer and write it back to the media device with
+     * WritePictureL().
+     *
+     * This method can only be called after the media device has been
+     * Initialized with InitializeL(). This method can only be called
+     * in buffer management mode, i.e. if the client has called
+     * MmvbmEnable(ETrue).
+     *
+     * Note that target-allocated and client-allocated input buffers
+     * cannot be mixed. In buffer management mode only input buffers
+     * allocated with this method can be sent to the media device.
+     *
+     * If a client has retrieved buffers with MmvbmGetBufferL(), it
+     * must be prepated to release them synchronously at any point if
+     * MmmfBufferManagementObserver::MmvbmoReleaseBuffers() is
+     * called. This may happen if the target media device suddenly
+     * loses access to the buffers due to DSA abort, resource
+     * management conflict, or media device destruction.
+     * 
+     * @param aSize The requested buffer size, in pixels. The buffer
+     *   size should match the picture size set at initialisation phase,
+     *   or otherwise suitable buffer may not be available. If the size
+     *   is smaller than the size set at initialisation phase, the
+     *   allocated buffer may be larger than requested.
+     * 
+     * @return A new input picture buffer. If no free buffers are
+     * available, the return value is NULL.
+     *
+     * @leave General The method will leave if an error occurs. Lack
+     * of free buffers is not considered an error.
+     */
+    TVideoPicture* MmvbmGetBufferL(const TSize& aSize);
+    
+    /** 
+     * Releases an input buffer back to the media device without using
+     * it. This method is mainly used as a response to a
+     * MmvbmReleaseBuffers() callback.
+     * 
+     * @param aBuffer The buffer to release.
+     */
+    void MmvbmReleaseBuffer(TVideoPicture* aBuffer);    
+    
+public:
+    
+     // === MMMFVideoSurfaceSupport ===
+    
+	/** 
+    Requests the media device to use graphics surfaces for video rendering. 
+    The client must call this method before Initialize() to ensure the media 
+    device allocates the right types of resources for rendering.
+    */
+    void MmvssUseSurfaces();
+         
+    /** 
+    Sets a new video surface support observer to receive surface management events 
+    from the media device.
+     
+    @param aObserver New observer object to use.
+    */
+    void MmvssSetObserver(MMMFVideoSurfaceObserver& aObserver);
+    
+    /** 
+    Retrieves surface parameters for a display. The client typically calls this in response 
+    to a MmvsoSurfaceCreated() or MmvsoSurfaceParametersUpdated() observer callback.
+     
+    @param  aSurfaceId
+	        Surface ID for the display.
+	@param  aCropRect
+	        Cropping rectangle within the surface. The crop rectangle identifies the area of 
+	        the surface that should be shown on the screen.
+	@param  aPixelAspectRatio
+	        Video picture pixel aspect ratio.
+
+	@leave KErrNotReady if no surface is available for the display.
+    */
+    
+    void MmvssGetSurfaceParametersL(TSurfaceId& aSurfaceId, TRect& aCropRect, 
+    					TVideoAspectRatio& aPixelAspectRatio);
+    /** 
+    Indicates that the surface is no longer in use and can be destroyed. The client typically calls
+    this in response to MmvsoSurfaceCreated() (while old surface is already in use and the current
+    should be removed) or MmvsoRemoveSurface() observer callback.  
+         
+    @param aSurfaceId Surface ID that is no longer in use
+    
+    @leave KErrNotFound if the surface does not exist
+    */
+    void MmvssSurfaceRemovedL(const TSurfaceId& aSurfaceId);    
+
+public:    
+
+    // === MMmfVideoPropertiesObserver ===
+    
+    /** 
+    Decoded video properties updated. The media device implementing the
+    MMmfVideoPropertiesNotifier extension will call this method immediately
+    before outputting a picture with the updated properties.
+    
+    When the extension is used between a decoder and a post-processor media
+    device, the post-processor can associate the changed properties with the
+    correct picture, since the next incoming picture after this call will
+    be the first updated one. 
+    
+    When the extension is used between a DevVideoPlay client and a
+    post-processor media device, the client can synchronously reconfigure
+    video display options using SetScaleOptionsL() and related methods. This
+    lets the client reconfigure the display for the correct picture.
+    
+    @param aYuvFormat Updated YUV format parameters. The updated fields are
+                      iAspectRatioDenom, iAspectRatioNum, and iCoefficients     
+    @param aPictureSize	Updated picture size. This size will be the true
+                       	picture display size, excluding any padding that
+                       	the codec might use.
+    */
+    virtual void MmvpoUpdateVideoProperties(const TYuvFormat& aYuvFormat, const TSize& aPictureSize);
+    
+public:
+
+    // === MMmfVideoResourceObserver ===
+    
+    /** 
+    Indicates that a media device has lost its resources. The client must
+    synchronously pause or stop processing before returning from this method
+    so that the media device can release its resources to the system. If
+    the client does not pause or stop, resource loss will be handled as a
+    fatal error.
+     
+    The client may start again or resume after receiving a
+    MvroResourcesRestored() callback.
+     
+    @param aMediaDevice UID for the media device that lost resources. The
+                        client can use this e.g. to determine whether the
+                        decoder or the post-processor lost resources. This
+                        is typically not required though since the client
+                        must pause DevVideo entirely.
+    */
+    virtual void MmvroResourcesLost(TUid aMediaDevice);
+
+    /** 
+    Indicates that a media device has regained its resources after a
+    previous resource loss. The client can restart or resume processing.
+    This can be done either synchronously or asynchronously.
+     
+    @param aMediaDevice UID for the media device that regained resources.
+    */
+    virtual void MmvroResourcesRestored(TUid aMediaDevice);
+            
+    
+    // === MMmfVideoSurfaceHandleControl ===
+    
+    /** 
+    Sets an external surface ID. This should be called as soon as external surface is created.    
+     
+    @param aSurfaceID external surface ID.
+        
+    */
+    
+    virtual void MmvshcSetSurfaceHandle(const TSurfaceId& aSurfaceHandle);
+    
+    /** 
+    Sets a redraw buffer to be used during resource loss.    
+     
+    @param aRedrawBuffer redraw buffer.
+        
+    */
+     virtual void MmvshcRedrawBufferToSurface(TPtrC8& aRedrawBuffer);
+     
+     /**
+      * Creates a surface and maps the surface with the chunk handle passed in.
+      * @param aAttributes
+      * @param aHandle is the Chunk handle for the data.
+      * @param aSurfaceId returns the surfaceId that was just created
+      * 
+      * @return error code
+      */
+         
+     virtual TInt MmvshcCreateSurface(const RSurfaceManager::TSurfaceCreationAttributes& aAttributes, TInt aHandle, TSurfaceId& aSurfaceId);
+   
+public:
+	// === MMmfVideoPropertiesNotifier ===
+    /** 
+    Sets a new video properties observer. This method can be called at any
+    time after the media device has been instantiated.
+     
+    @param aObserver New observer object.
+    */
+    virtual void MmvpnSetObserver(MMmfVideoPropertiesObserver* aObserver);
+
+public:
+	
+	void ReturnPicToDecoder(TVideoPicture* aPic);
+	TInt AttemptToPost();
+	
+public:
+    //=== MMdfTrickPlayControl === =     
+    /**        
+     * Query the Direction capabilities from the MDF decoders and       
+     * post processor.       
+     *        
+    */       
+    virtual void MmvprcGetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities);
+
+    /**       
+     * Sets the playback speed. A negative rate means play backward.       
+     * +/- percentage.       
+     *        
+     */       
+    virtual void MmvprcSetPlayRateL(const TInt aRate);
+
+    /**       
+     * Gets the playback speed. A negative rate means play backward.       
+     * +/- percentage.       
+     *        
+     */       
+    virtual TInt MmvprcPlayRateL();
+
+    /**       
+     * Sets the step frame number in frame step mode       
+     * +/- frames       
+     */       
+    virtual void MmvprcStepFrameL(const TInt aStep);
+
+    /**       
+     * Registers the observer       
+     */       
+    virtual void MmvprcSetObserver(MMmfVideoPlayRateObserver& aObserver); 
+
+public: 
+     
+    // === MMmfVideoSecureOutput ===
+    /**
+     * Notifies the media device if the content can only be sent to a
+     * secure output. The device display is typically considered a
+     * secure output, but a high-quality unprotected analog or digital
+     * video output connector is not. By default all content can be
+     * sent to both secure and insecure outputs.
+     *
+     * This method can only be called before the media device has been
+     * initialised with InitializeL().
+     *
+     * @param aSecure Set to ETrue if the content can only be sent to
+     *     a secure output, EFalse if both secure and unsecure outputs can
+     *     be used.
+     *
+     * @leave KErrNotSupported Insecure outputs cannot be
+     * disabled. The client should not play protected content.
+     */    
+     virtual void MmvsoSetSecureOutputL(TBool aSecure);
+
+public:
+     //=== AdvancedVideoSecureOutput === =     
+     virtual void MmavsoSetAllowedOutputL(TUint aAllowedOutputMask);
+    
+public:
+     // === MMmfPostInitializeRequest ===
+     virtual void MmpirPostInitializeRequest(MMmfPostInitializeResponse& aResponse);
+     
+protected: 
+
+    // === CMMFVideoPostProcHwDevice ===
+    /**
+    Set the proxy implementation to be used. Called just after the object is constructed.
+    @param  "aProxy"    "The proxy to use."
+    */
+    void SetProxy(MMMFDevVideoPlayProxy& aProxy);
+    
+protected:
+
+    /**
+     *  Symbian 2nd phase constructor .
+     */
+    void ConstructL();
+    
+private:    
+	TInt IsTimeToPost(TVideoPicture* frame, TInt64& delta);
+	TVideoPicture* CreateBuffersL(TInt aBufId);
+    void CreateVBMBuffersL();
+    TInt SetupExternalSurface(const TSurfaceId &aSurfaceID);
+    void ReleaseInputQ();
+    void ReleaseProcessQ();
+    void ReleasePicture(TVideoPicture *pic);
+    void PublishSurfaceCreated();
+    void PublishSurfaceUpdated();
+    TInt SetupSurface();
+    void SetSurfaceAttributes(const TSize& aSize, TInt aNumBuf);
+    TInt GetID(TVideoPicture *aPicture);
+    TInt GetExternalBufferID(TVideoPicture *aPicture);
+    TInt RegisterSurface(const TSurfaceId& aSurfaceId);
+    TInt IsGceReady();
+    void SetTimer(TInt64 aDelta);
+    TInt ConvertPostProcBuffer(TVideoPicture* pSrc, TVideoPicture* pDest);
+    void AddPictureToVBMQ(TVideoPicture *pic);
+    void AddPictureToColorConversionQ(TVideoPicture *pic);
+    void ResetCountingBuffer();
+    void PicturesSkipped();
+    TVideoPicture* DoColorConvert(TVideoPicture* aPicture);
+
+    /**       
+     Adds a picture to the Input queue. Based on the timestamp of the picture,
+     it is either appeneded at the end of the queue or inserted at the 
+     appropriate position. The queue is arranged in the ascending order. 
+     The ret value indicates if the head of the queue was changed or not.         
+    */  
+    TInt AddToQ(TVideoPicture* aPicture);
+    
+    /**       
+     Removes a picture from Input queue based on the playrate.
+     If the playrate is +ve ie forward playback head will be removed
+     and if the playrate is -ve ie backward playback tail
+     will be removed.         
+    */  
+    void RemoveFromQ();
+    
+    /**       
+     Returns a picture from Input queue based on the playrate.
+     If the playrate is +ve ie forward playback head will be returned
+     and if the playrate is -ve ie backward playback tail  
+     will be returned.       
+    */  
+    TVideoPicture* PeekQ();
+
+    /**
+    Adds a surface hint to a video surface. If there is any hint already added, 
+    the surface is updated with the new hint. 
+    */		
+    TInt AddHints();
+    
+	#ifdef _DUMP_YUV_FRAMES
+    void captureYuv(TVideoPicture* aPicture);
+    #endif
+    
+    TInt SetSourceFormat();
+    TInt SetSourceRange();
+    TInt ColorConvert(tBaseVideoFrame* aInputFrame, TUint8* aDestPtr, tWndParam* aInputCropWindow, tWndParam* aOutputCropWindow);
+
+private:
+
+    //
+    // C++ default constructor.  
+    //
+    CNGAPostProcHwDevice();
+
+    //
+    // State of post processor
+    //
+    enum TPPState
+    {
+        EInitializing,
+        EInitialized,
+        EPlaying,
+        EPaused,
+        EStopped
+    };
+    
+    enum TTimeToPost
+    {
+        ESkipIt = -1,
+        EPostIt = 0,
+        EDelayIt = 1,
+    };
+    
+private: 
+
+    MMMFDevVideoPlayProxy*      				iProxy;															
+    CMMFVideoDecodeHwDevice*    				iInputDecoderDevice;															
+    RArray<TVideoPicture*>              		iInputQ;															
+    RArray<TVideoPicture*>              		iProcessQ;															
+    MMMFClockSource*            				iClockSource;															
+    TTimeIntervalMicroSeconds					iCurrentPlaybackPosition;															
+    TPPState        							iPPState;															
+    CNGAPostProcSurfaceHandler*					iSurfaceHandler;
+    CNGAPostProcSessionManager*					iSessionManager;
+	
+	RSurfaceManager::TSurfaceCreationAttributesBuf	iAttributes;
+	RChunk										iChunk;
+	RSurfaceManager::TInfoBuf 					iInfo;
+	TSurfaceId									iSurfaceId;
+	TBool           							iIsInputEnded;
+	CNGAPostProcTimer*							iPostingTimer;
+	CMMFDevVideoPlay::TPictureCounters  		iPictureCounters;
+	TBool 										iFirstPictureUpdated;
+	TBool 										iUsingExternalSurface;
+    TBool           							iIsColorConversionNeeded;
+    RArray<TVideoPicture*>              		iColorConversionQ;
+    TBool 										iSurfaceCreatedEventPublished;
+    TInt                                		iOverflowPictureCounter;
+    TInt 								    	iVideoFrameBufSize;	
+    TBool 										iResourceLost;
+    TBool 										iRedrawDone;
+	// Flag to indicate that the redraw surface has been created, and
+	// can be used in a subsequent call ro Redraw()
+	TBool										iRedrawSurfaceInUse;
+
+    //-- members for buffer management --
+    MMmfVideoBufferManagementObserver*  		iVBMObserver;
+    TBufferOptions                      		iVBMBufferOptions;
+    RArray<TVideoPicture*>              		iVBMBufferReferenceQ;
+    RArray<TVideoPicture*>              		iVBMBufferQ;
+    TBool                               		iVBMEnabled;
+    RArray<TUncompressedVideoFormat>    		iSupportedInputFormats;
+    TInt										count;
+    
+    //-- members for Surface Hints --
+    RSurfaceManager::THintPair					iHint;
+    TUint 										iSurfaceMask;
+    TUid										iSurfaceKey;
+            
+    //-- members for Surface support --
+    MMMFVideoSurfaceObserver*					iVideoSurfaceObserver;
+	MMmfVideoPropertiesObserver*				iVPObserver;
+	RWsSession									iWsSession;
+	TSize										iPicSize;
+	TUint										iAspectRatioNum;
+	TUint										iAspectRatioDenom;
+	//-- members for Trickplay support --
+	TInt                                iStepFrameCount;
+    TInt                                iPlayRate;       
+    TBool                               iKeyFrameMode;       
+    MMmfVideoPlayRateObserver*          iFPObserver;       
+    TUint8                              iSkippedFramesCountingBuffer[64];       
+    TUint8                              iSkippedFramesInLast64Frames;       
+    TUint8                              iCurrentPosInFramesCountingBuffer; 
+	TUncompressedVideoFormat 			iVideoFormat;
+        //---------- utility variables -------
+	// Image source format
+	TUint8 								iSourceFormat;
+
+	//Image range
+	TUint8		 						iSourceRange;
+
+    //-- members for PostInitializeRequest support --
+    MMmfPostInitializeResponse* iPostInitializeResponse;
+    TBool iIsExternalChunk;
+};    
+
+/**
+ * Timer of Posting
+ */
+
+class CNGAPostProcTimer: public CTimer
+    {
+public:
+    static CNGAPostProcTimer* NewL( CNGAPostProcHwDevice& aParent );
+    ~CNGAPostProcTimer();
+    
+protected:    
+    void RunL();
+    
+private:
+    CNGAPostProcTimer( CNGAPostProcHwDevice& aParent );
+    void ConstructL();
+    
+private:
+    CNGAPostProcHwDevice& iParent;
+};
+
+#endif //__NGAPOSTPROCHWDEVICE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcHwDevice_UID.hrh	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+/*
+*******************************************************************************
+Product     : NGA MDF Plugins
+Module      : NGA Post processor HwDevice
+File        : NGAPostProcHwDevice_UID.hrh
+Description : hrh file containing definitions of UIDS used in NGA Post processor 
+			  HwDevice					
+*******************************************************************************
+*/
+
+
+#ifndef __NGAPOSTPROCHWDEVICE_HRH__
+#define __NGAPOSTPROCHWDEVICE_HRH__
+
+#define KUidNGAPostProcHwDeviceImplUid               0x2003162A // 0x10273417 //0x200195B0
+#define KUidNGAPostProcHwDeviceDllUid                0x20031629 // 0x10273416 //0x200195AF
+
+#endif //__NGAPOSTPROCHWDEVICE_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcNotifier.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2008 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 __NGAPOSTPROCNOTIFIER_H__
+#define __NGAPOSTPROCNOTIFIER_H__
+
+#include <e32base.h>
+
+class CNGAPostProcSessionManager;
+
+class CNGAPostProcNotifier: public CActive
+    {
+public:
+    static CNGAPostProcNotifier* NewL( CNGAPostProcSessionManager& aParent );
+    ~CNGAPostProcNotifier();
+    void SetBufferId(TInt aBufId);
+    void Activate();
+    
+private:
+    void RunL();
+    void DoCancel();
+    TInt RunError( TInt aError );
+
+private:
+    CNGAPostProcNotifier( CNGAPostProcSessionManager& aParent );
+    void ConstructL();
+    
+private:
+    CNGAPostProcSessionManager& iParent;
+    TInt iBufferId;
+};
+
+#endif //__NGAPOSTPROCNOTIFIER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSessionManager.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2008 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 __NGAPOSTPROCSESSIONMANAGER_H__
+#define __NGAPOSTPROCSESSIONMANAGER_H__
+
+#include <graphics/surface.h> //TSurfaceId
+#include <graphics/surfacemanager.h> //RSurfaceManager
+#include <e32std.h>
+#include <e32base.h>
+
+class RSurfaceUpdateSession;
+class MNGAPostProcSessionManagerObserver;
+class CNGAPostProcNotifier;
+
+class CNGAPostProcSessionManager: public CBase
+{
+friend class CNGAPostProcNotifier;
+
+public: 
+    //  === Constructors and destructor ===
+    /**
+    * Two-phased constructor.   
+    * @return pointer to an instance of CNGAPostProcSessionManager
+    */
+    static CNGAPostProcSessionManager* NewL();
+
+    /**
+    * Destructor.
+    */
+    ~CNGAPostProcSessionManager();
+
+public: 
+    
+    /**
+    submits buffer to GCE for displaying.
+
+    @param  "aBufId"   "ID of the buffer that needs to be displayed."
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    TInt PostPicture(const TSurfaceId& aSurfaceId, TInt aBufId, TBool aNotifyRequired);
+
+    
+    
+    /**
+	Removes display from the system, if it is already existing. 
+
+    @param  "aDisplayId"  "ID of the display that needs to be removed from the system"
+    */
+    void HandleBufferRelease(TInt aBufId, TInt aStatus);
+    
+    /**
+	Removes display from the system, if it is already existing. 
+
+    @param  "aDisplayId"  "ID of the display that needs to be removed from the system"
+    */
+    void SetObserver(MNGAPostProcSessionManagerObserver& aObserver);
+	  
+	
+	void CreateNotifierL(TInt aNumSurfaceBuffers);
+	
+	void CancelNotifiers(); 
+	  
+protected:
+	CNGAPostProcSessionManager();
+    /**
+     *  Symbian 2nd phase constructor .
+     */
+    void ConstructL();
+
+private:
+    /**
+    Cancels Surface Update Notifications
+    */
+    void CancelUpdate();
+    
+private: 
+
+    RSurfaceUpdateSession*      			iSurfaceUpdateSession;
+    MNGAPostProcSessionManagerObserver*		iObserver;
+    RPointerArray<CNGAPostProcNotifier>		iAOList;
+};    
+
+#endif //__NGAPOSTPROCSESSIONMANAGER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSessionManagerObserver.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008 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 __NGAPOSTPROCSESSIONMANAGEROBSERVER_H__
+#define __NGAPOSTPROCSESSIONMANAGEROBSERVER_H__
+
+/**
+@internal
+
+The class is a mixin and is intended to support for communicating buffers availablity 
+after buffer has been released by GCE. 
+*/
+class MNGAPostProcSessionManagerObserver
+{
+public:
+    /**
+    This method can be called from session manager, whenever a buffer is released by GCE.
+
+    @param  "aBufId Id of the buffer that got released by GCE. This buffer can be used to get 
+    		 more data from decoder"
+    */
+    virtual void BufferAvailable(TInt aBufId, TInt aStatus) = 0;
+    
+};    
+
+#endif //__NGAPOSTPROCSESSIONMANAGEROBSERVER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/NGAPostProcSurfaceHandler.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2008 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 __NGAPOSTPROCSURFACEHANDLER_H__
+#define __NGAPOSTPROCSURFACEHANDLER_H__
+
+#include <e32std.h>
+#include <graphics/surface.h>
+
+class RSurfaceManager;
+
+class CNGAPostProcSurfaceHandler: public CBase
+{
+
+public: 
+    //  === Constructors and destructor ===
+    /**
+    * Two-phased constructor.   
+    * @return pointer to an instance of CMMFVideoPostProcHwDevice
+    */
+    static CNGAPostProcSurfaceHandler* NewL();
+
+    /**
+    * Destructor.
+    */
+    ~CNGAPostProcSurfaceHandler();
+
+public: 
+    
+    /**
+    Sets the device input format to an uncompressed video format.
+
+    @param  "aFormat"   "The input format to use."
+    @leave  "The method will leave if an error occurs. Typical error codes used:
+            * KErrNotSupported - The input format is not supported."    
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    TInt CreateSurface(const RSurfaceManager::TSurfaceCreationAttributes & aAttributes, TSurfaceId& aSurfaceId, const RChunk& aChunk);
+    TInt CreateSurface(const RSurfaceManager::TSurfaceCreationAttributesBuf & aAttributes, TSurfaceId& aSurfaceId);
+
+    /**
+    Sets the decoder device that will write data to this post-processor. Decoded pictures will be 
+    written with WritePictureL() or through a custom interface. After pictures have been processed, 
+    they must be returned to the decoder using ReturnPicture().
+
+    @param  "aDevice"   "The decoder source plug-in to use."
+    @pre    "This method can only be called before the hwdevice has been initialized with Initialize()."
+    */
+    TInt OpenSurface(const TSurfaceId& aSurfaceId);
+
+    /**
+    Writes an uncompressed video picture to the post-processor. The picture must be returned to the 
+    client or source plug-in after it has been used.
+
+    @param  "aPicture"  "The picture to write."
+    @leave  "This method may leave with one of the system-wide error codes."
+    @pre    "This method can only be called after the hwdevice has been initialized with Initialize()."
+    */
+    TInt MapSurface(const TSurfaceId& aSurfaceId, RChunk& aHandle);    
+
+    /**
+    Retrieves post-processing information about this hardware device. 
+    The device creates a CPostProcessorInfo structure, fills it with correct data, pushes it 
+    to the cleanup stack and returns it. The client will delete the object when it is no 
+    longer needed.
+
+    @return "Post-processor information as a CPostProcessorInfo object. 
+            The object is pushed to the cleanup stack, and must be deallocated by the caller."
+    @leave  "This method may leave with one of the system-wide error codes.
+    */
+    TInt SurfaceInfo(const TSurfaceId& aSurfaceId, RSurfaceManager::TInfoBuf& aInfo);
+
+    /**
+    Retrieves the list of the output formats that the device supports. The list is ordered in 
+    plug-in preference order, with the preferred formats at the beginning of the list. The list 
+    can depend on the device source format, and therefore SetSourceFormatL() must be called before 
+    calling this method.
+
+    @param "aFormats" "An array for the result format list. The array must be created and destroyed by the caller."
+    @leave  "This method may leave with one of the system-wide error codes.
+    @pre    "This method may only be called before the hwdevice has been initialized using Initialize()."
+    */
+    TInt DestroySurface(const TSurfaceId& aSurfaceId);
+    
+    /**
+	Get the offset of the specified buffer from the base address of the underlying
+	chunk.
+	
+	To obtain the address of the buffer, the offset returned must be added onto the
+	base address of the RChunk returned in a call to MapSurface(). Note that
+	buffer offsets are immutable during the lifetime of the surface.
+	@param aParam The input parameters including the surface ID and buffer index.
+	@pre The surface is open in the calling process.
+	@return KErrNone if successful, KErrArgument if aSurfaceId or aBuffer are invalid,
+	KErrAccessDenied if the surface is not open in the current process, KErrNotSupported if
+	the surface is not mappable, otherwise a system wide error code.
+	*/
+    TInt GetBufferOffset(const TSurfaceId& aSurfaceId, TInt aBuffer, TInt& aOffset);
+    
+     /**
+    Adds a Surface hint to the video surface. 
+    
+    */
+    TInt AddSurfaceHint(const TSurfaceId& aSurfaceId,const RSurfaceManager::THintPair& aHint);
+    
+    /**
+    Updates an existing Surface hint. 
+    
+    */
+    TInt SetSurfaceHint(const TSurfaceId& aSurfaceId,const RSurfaceManager::THintPair& aHint);
+    
+protected:
+	CNGAPostProcSurfaceHandler();
+    /**
+     *  Symbian 2nd phase constructor .
+     */
+    void ConstructL();
+
+private: 
+
+    RSurfaceManager*      iSurfaceManager;
+
+    RSurfaceManager::TSurfaceCreationAttributesBuf iSurfaceAttributesBuf;
+    // A surface attribute.
+    RSurfaceManager::TSurfaceCreationAttributes& iSurfaceAttributes;
+};    
+
+#endif //__NGAPOSTPROCSURFACEHANDLER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/common.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2008 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 INCLUDE_COMMON
+#define INCLUDE_COMMON
+
+
+typedef signed char          int8;
+typedef unsigned char        uint8;
+typedef short int            int16;
+typedef unsigned short int   uint16;
+typedef int                  int32;
+typedef unsigned int         uint32;
+
+typedef float                flt32;
+typedef double               flt64;
+
+typedef unsigned char        tBool;
+typedef signed int           tError;
+
+
+#define E_TRUE               1
+#define E_FALSE              0
+
+#define E_ON                 1
+#define E_OFF                0
+
+#define E_DEBUG              1
+#define E_RELEASE            0
+
+#define E_SUCCESS            0
+#define E_FAILURE           (-1)
+#define E_OUT_OF_MEMORY     (-2)
+#define E_OUT_OF_RANGE      (-3)
+#define E_FILE_CREATE_FAIL  (-4)
+#define E_UNDEFINED_FLAG    (-5)
+#define E_ERROR_ARGUMENT	  (-16)
+
+#define E_USER_ERROR_BASE   (-1000)
+
+#define mIsSuccess(code)    ((code)>=0)
+#define mIsFailure(code)    ((code)<0)
+
+/* These define the srcImageFormats */
+#define EYuv420Chroma1_Planar		0x01
+#define EYuv420Chroma2_Planar		0x02
+#define EYuv420Chroma3_Planar		0x03
+#define EYuv422Chroma1_LE   0x04
+#define EYuv422Chroma2_LE   0x05
+#define EYuv422Chroma1_BE   0x06
+#define EYuv422Chroma2_BE   0x07
+
+/* These define the dstImageFormats */
+#define EBitmapColor4k_DitherOrdered	0x01
+#define EBitmapColor4k_DitherErrDiff	0x02
+#define EBitmapColor64k_DitherOrdered	0x03
+#define EBitmapColor64k_DitherErrDiff	0x04
+#define EBitmapColor16M					0x05
+#define EBitmapColor16MU				0x06
+
+/* These define the various color conversion schemes */
+#define EITU601_5_FULLRANGE		0X01
+#define EITU601_5_REDUCEDRANGE	0X02
+#define EB709_FULLRANGE			0X03
+#define EB709_REDUCEDRANGE		0X04
+
+#define COLOR_CONV_PRECISION    14
+#define COLOR_CONV_ROUND        8192
+/* This is the data structure for the output video frame buffer */
+typedef struct BaseVideoFrame
+{
+    uint8  *lum;       /* Luminance pointer */
+		uint8  *cb;        /* Cb pointer */
+		uint8  *cr;        /* Cr pointer */
+		uint16  width;     /* Width of the frame */
+		uint16  height;    /* Height of the frame */
+		uint32  timeStamp; /* Playback Timestamp */
+
+} tBaseVideoFrame;
+
+typedef enum {YUV422INT_LE, YUV422INT_BE} EBufferLayout422; 
+
+/* Crop window structure */
+typedef struct WndParam
+{  
+	uint16 xOffset;    
+	uint16 yOffset;
+	uint32 wndWidth;
+	uint32 wndHeight;
+}tWndParam;
+
+#endif  /* INCLUDE_COMMON */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/devvideosurfacehandlecustominterface.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#ifndef DEVVIDEOSURFACEHANDLECUSTOMINTERFACE_H
+#define DEVVIDEOSURFACEHANDLECUSTOMINTERFACE_H
+
+#include <graphics/surface.h>
+#include <mmf/common/mmfvideo.h>
+#include <graphics/surfacemanager.h>
+
+/** 
+DevVideo SurfaceHandle Custom Interface UID.
+
+@publishedPartner
+@prototype
+*/
+const TUid KUidMMFVideoSurfaceHandleControl = { 0x10286486 };
+
+/**
+Video play surface handle custom interface. This interface can be used by
+a H/W device which creates a surface to pass the surface handle to 
+another H/W device. Alternatively, a H/W device may create resources for the 
+surface, for example, chunks and pass details to another H/W device to 
+create surface based on the chunk information.
+Typically implemented by the post processor and used by a decoder.
+
+@publishedPartner
+@prototype
+*/
+class MMmfVideoSurfaceHandleControl
+	{
+	public:
+
+	/**
+	@param aSurfaceHandle Surface handle for the new surface.
+	*/
+	virtual void MmvshcSetSurfaceHandle(const TSurfaceId& aSurfaceHandle) = 0;
+	
+    /**
+    @param  aRedrawBuffer Buffer  for the  redrawing of  the last  picture. The
+    memory of this buffer is owned  by the caller and ownerhship of  this memory
+    is not transerred as  part of this call.  Also, the memory may  not be valid
+    after the call completes.
+     */
+     virtual void MmvshcRedrawBufferToSurface(TPtrC8& aRedrawBuffer) = 0;
+     
+     /**
+      This is used to get th esurface create dbased on an ixisting chunk. Typically,
+      the chunk would be created by the caller of this method and surface would be 
+      created by the implementer.
+       
+      @param aAttributes Info necessary to create surface based on existing chunk.
+      @param aHandle Handle of the existing chunk
+      @param aSurfaceId Surface Id created as on output of this method.
+      
+      @return error code 
+      */
+     virtual TInt MmvshcCreateSurface(const RSurfaceManager::TSurfaceCreationAttributes& aAttributes, TInt aHandle, TSurfaceId& aSurfaceId) = 0;
+    
+    };
+
+
+#endif // DEVVIDEOSURFACEHANDLECUSTOMINTERFACE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/fetchframecustominterface.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,51 @@
+// Copyright (c) 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:
+//
+
+#ifndef FETCHFRAMECUSTOMINTERFACE_H
+#define FETCHFRAMECUSTOMINTERFACE_H
+
+/** 
+FetchFrame Custom Interface UID.
+
+@publishedPartner
+@prototype
+*/
+const TUid KUidMMFVideoFetchFrame = { 0x20024343 };
+
+/**
+This interface can be used to fetch the frame data using the buffer id.
+This interface can be used by a H/W device which needs to send the frame 
+data back to application.
+
+@publishedPartner
+@prototype
+*/
+class MMmfVideoFetchFrame
+	{
+	public:
+
+	/**
+	Set the handle for the surface
+
+	@param  aBufId Buffer id whose frame data needs to be returned. 
+	
+	returns pointer to a frame data. memory is allocated by the Custom interface
+	implementor to hold the frame data on the host side. ownership of the memory
+	would be transfered to the caller of this method.
+	*/
+	virtual TUint8* MmvffGetFrame(TInt aBufId) = 0;
+	};
+
+#endif // FETCHFRAMECUSTOMINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/postinitializeci.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#ifndef POSTINITIALIZECI_H_
+#define POSTINITIALIZECI_H_
+
+#include <e32cmn.h>
+
+static const TUid KUidMmfPostInitializeRequest = { 0x20031dac };  //  allocated properly
+
+class MMmfPostInitializeResponse
+	{
+public:
+	virtual void MmpirPostInitializeResponseL() = 0;
+	};
+
+class MMmfPostInitializeRequest
+	{
+public:
+	virtual void MmpirPostInitializeRequest(MMmfPostInitializeResponse& aResponse) = 0;
+	};
+
+#endif /* POSTINITIALIZECI_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/inc/surface_hints.h	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2008 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:
+* Surface Manager API
+*/
+
+#ifndef __SURFACE_HINTS_LOCAL_H__
+#define __SURFACE_HINTS_LOCAL_H__
+
+//- Include Files  ----------------------------------------------------------
+
+#include <e32cmn.h>
+
+
+//- Namespace ---------------------------------------------------------------
+
+namespace surfaceHints
+{
+
+//- Constants ---------------------------------------------------------------
+
+/** Hint of the surface content.
+    @see TSurfaceContent for possible values
+*/
+const TInt KSurfaceContent = 0x1;
+
+/** Hint of the expected update rate of the surface content.
+    Value for a surface containing e.g. 25 fps video the value should be 25.
+    For a static UI element the value should be 0.
+    @see TSurfaceUpdate
+*/
+const TInt KSurfaceUpdate = 0x2;
+
+/** Hint whether the surface content is copy protected and can it be
+    shown on external displays.
+    @see TSurfaceProtection for possible values.
+*/
+const TInt KSurfaceProtection = 0x3;
+
+
+/** Values used for the KSurfaceContent key */
+enum TSurfaceContent
+    {
+    /** No specific use-case */
+    EGeneric,
+    /** Camera viewfinder frames */
+    EViewFinder,
+    /** Images captured by camera */
+    EStillImage,
+    /** Decoded video frames */
+    EVideoPlayback,
+    /** Video frames from video telephony */
+    EVideoTelephony,
+    /** EGL surface */
+    EGfx,
+    /** Main UI surface */
+    EUi,
+    /** Composition target surface */
+    ECompositionTarget,
+    /** Indicates that the surface has to accessible by ARM.
+        This can be orr'ed with other TSurfaceContent enumerations. */
+    EArmAccess = 0x80000000
+    };
+
+
+/** Values used for the KSurfaceProtection key. The values are bitmasks and can be combined
+* e.g. EAllowAnalogProtectionRequired | EAllowDigitalProtectionRequired.
+*/
+enum TSurfaceProtection
+    {
+    /**
+    * Not allowed on external outputs
+    */
+    EAllowInternalOnly                  = 0x00000000,
+
+    /**
+    * Allowed on all external outputs
+    */
+    EAllowAllExternals                  = 0xFFFFFFFF,
+
+    /**
+    * Allow passing content over analog outputs,
+    * e.g. composite and S-video
+    */
+    EAllowAnalog                        = 0x00000010,
+
+    /**
+    * Allow output over an analog output channel which has a protection
+    * mechanism
+    */
+    EAllowAnalogProtectionRequired      = 0x00000020,
+
+    /**
+    * Allow passing content over digital outputs,
+    * e.g. DVI and HDMI
+    */
+    EAllowDigital                       = 0x00000200,
+
+    /**
+    * Licensed product must attempt to engage HDCP to protect the content.
+    * However it should be passed through to HDMI even if HDCP is not engaged or fails to engage.
+    */
+    EAllowDigitalProtectionRequested    = 0x00000400,
+
+    /**
+    * Licensed product is required to engage HDCP to protect the content.
+    * If HDCP is not engaged or can not be engaged the content must not be passed through to HDMI.
+    */
+    EAllowDigitalProtectionRequired     = 0x00000800,
+    };
+
+
+class TSurfaceUpdate
+    {
+    /** Constructor.
+        @param aUpdateRate   How often the surface content is redrawn per second.
+        @param aTearingFree  When ETrue surface updates should be synchronized
+                             with display refresh rate, otherwise surface can
+                             be updated as fast as possible.
+    */
+    inline TSurfaceUpdate(TUint aUpdateRate, TBool aTearingFree);
+
+    /** Converts a value to TSurfaceUpdate */
+    inline TSurfaceUpdate(TInt aValue);
+
+    /** Converts TSurfaceUpdate to a signed integer, so it can be used as
+        a value for KSurfaceUpdate key. */
+    inline operator TInt() const;
+
+    /** Getter for surface update rate.
+        @return updates per second
+    */
+    inline TUint UpdateRate() const;
+
+    /** Getter for surface update synchronization.
+        @return ETrue - updates should be synchronized with display refresh rate,
+                EFalse - surface can be updated as fast as possible.
+    */
+    inline TBool TearingFree() const;
+
+    private:
+        TUint iValue;
+    };
+
+
+//- Forward Declarations ----------------------------------------------------
+
+
+//- Class Definitions -------------------------------------------------------
+
+
+//- Inline Functions --------------------------------------------------------
+
+TSurfaceUpdate::TSurfaceUpdate(TUint aUpdateRate, TBool aTearingFree)
+    : iValue( ( aUpdateRate & 0xFFFF ) | ( aTearingFree ? 0x80000000 : 0x0 ) )
+    {
+    }
+TSurfaceUpdate::TSurfaceUpdate(TInt aValue)
+    : iValue( static_cast<TUint>( aValue ) )
+    {
+    }
+
+TSurfaceUpdate::operator TInt() const
+    {
+    return static_cast<TInt>( iValue );
+    }
+
+TUint TSurfaceUpdate::UpdateRate() const
+    {
+    return ( iValue & 0xFFFF );
+    }
+
+TBool TSurfaceUpdate::TearingFree() const
+    {
+    return ( iValue & 0x80000000 ) ? ETrue : EFalse;
+    }
+
+}; //namespace surfaceHints
+
+#endif //__SURFACE_HINTS_LOCAL_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/rom/NGA_MDF_Postprocessor.iby	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2008 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 __NGA_MDF_POSTPROCESSOR_IBY__
+#define __NGA_MDF_POSTPROCESSOR_IBY__
+
+data=ZSYSTEM\install\nga_mdf_postprocessor_stub.sis               \System\install\nga_mdf_postprocessor_stub.sis
+
+ECOM_PLUGIN(NGAPostProcHwDevice110.dll, NGAPostProcHwDevice110.rsc)
+
+
+#endif // __NGA_MDF_POSTPROCESSOR_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/200195AF.rss	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+//200195AF.rss
+// Description - Resource File for the Video PostProc HwDevice
+
+
+#include <ecom/registryinfo.rh>
+#include <mmf/devvideo/devvideoplugininterfaceuids.hrh>
+#include "NGAPostProcHwDevice_UID.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid = KUidNGAPostProcHwDeviceDllUid;
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = KUidDevVideoPostProcessorHwDeviceDefine;
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = KUidNGAPostProcHwDeviceImplUid;
+					version_no = 1;
+					display_name = "S60 CS NGA PostProc HW Device";
+					default_data = "" ; // n/a
+					opaque_data = "0x0000005D";  
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/Colorspace_conv_yuv.c	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,269 @@
+/*
+* 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:
+*
+*/
+
+
+#include "common.h"
+
+#ifndef NULL
+#define NULL (void*)0
+#endif 
+
+int32 IPEmz_sYUV420toY2VY1U(tBaseVideoFrame* yuv420Frame, tBaseVideoFrame* yuv422Frame, int16 stride);
+int32 IPEmz_sYUV420toUY1VY2(tBaseVideoFrame* yuv420Frame, tBaseVideoFrame* yuv422Frame, int16 stride);
+
+/*
+*******************************************************************************
+Name            : IPEmz_gYUV420toY2VY1U
+Description     : This fuction converts image from yuv420 to YUYV interleaved format
+Parameter       : yuv420Frame :contains the decoded image of jpeg stream in yuv420 format
+          yuyvFrame:this is user passed buffer to store the output in YUYV
+              interleaved format
+Return Value    : int32
+*******************************************************************************
+*/
+
+int32 IPEmz_sYUV420toY2VY1U(tBaseVideoFrame* yuv420Frame, tBaseVideoFrame* yuv422Frame, int16 stride)
+{
+    int32   lLumWidth, lLumHeight;  
+    uint8   *lLumPtr1;
+    uint8   *lCrPtr;
+    uint8   *lCbPtr;
+  	int32   lY1, lCr, lCb,lTemp;
+    int32   i,j;
+  	uint32  *lOutyuvBufferPtr;
+  	uint8		*pOutputLinePtr;
+    
+  	lLumWidth = yuv420Frame->width;	
+	lLumHeight = yuv420Frame->height;
+	
+	if (stride < lLumWidth<<1)
+        return E_ERROR_ARGUMENT;
+	    
+	lLumPtr1 = yuv420Frame->lum+lLumWidth*(lLumHeight-1);
+  lCbPtr = yuv420Frame->cb+(lLumWidth>>1)*((lLumHeight>>1)-1);
+  lCrPtr = yuv420Frame->cr+(lLumWidth>>1)*((lLumHeight>>1)-1);
+	
+	lOutyuvBufferPtr = (uint32*) (yuv422Frame->lum+((lLumHeight-1)*(stride)));	
+	pOutputLinePtr= (uint8*)lOutyuvBufferPtr;
+ 	     
+  for(i = 0; i < lLumHeight ; i ++)
+	{
+		j=(lLumWidth >> 1) + 1;
+		while(--j)
+		{
+			lY1    = *lLumPtr1++; //Y1
+			lCr	   = *lCrPtr++;			
+			lTemp  = *lLumPtr1++; //Y2
+			lCb    = *lCbPtr++;
+		
+			lTemp |= (lY1 << 16);			  
+			lCr |= (lCb<<16);	//Cb and Cr are common			
+			*lOutyuvBufferPtr++ = (uint32)(lTemp|(lCr<<8));
+	    }
+	    
+		if(i&1)
+		{		
+			lCbPtr	 -= lLumWidth;
+			lCrPtr	 -= lLumWidth;			
+		}
+		else
+		{
+			lCbPtr	 -= lLumWidth/2;
+			lCrPtr	 -= lLumWidth/2;			
+		}
+
+		lLumPtr1 -= lLumWidth*2;	
+		pOutputLinePtr -= stride;
+ 	  lOutyuvBufferPtr = (uint32*) pOutputLinePtr;
+	}
+	
+  return E_SUCCESS;
+}
+
+/*
+*******************************************************************************
+Name            : IPEmz_gYUV420toUY1VY2
+Description     : This fuction converts image from yuv420 to YUYV interleaved format
+Parameter       : yuv420Frame :contains the decoded image of jpeg stream in yuv420 format
+          yuyvFrame:this is user passed buffer to store the output in YUYV
+              interleaved format
+Return Value    : int32
+*******************************************************************************
+*/
+#if (defined ARM_V5) || (defined ARM_V5E) || (defined __WINSCW__)
+int32 IPEmz_sYUV420toUY1VY2(tBaseVideoFrame* yuv420Frame, tBaseVideoFrame* yuv422Frame, int16 stride)
+{
+    int32   lLumWidth, lLumHeight;  
+    uint8   *lLumPtr;
+    uint8   *lCrPtr;
+    uint8   *lCbPtr;
+  	int32   lY1, lCr, lCb,lTemp;
+    int32   i,j;
+	  uint32  *lOutyuvBufferPtr;
+	  uint8		*pOutputLinePtr;
+    
+  	lLumWidth = yuv420Frame->width; 
+  	lLumHeight = yuv420Frame->height;
+
+    if (stride < lLumWidth<<1)
+        return E_ERROR_ARGUMENT;
+    
+    lLumPtr = yuv420Frame->lum+lLumWidth*(lLumHeight-1);
+    lCbPtr = yuv420Frame->cb+(lLumWidth>>1)*((lLumHeight>>1)-1);
+    lCrPtr = yuv420Frame->cr+(lLumWidth>>1)*((lLumHeight>>1)-1);
+	
+	  lOutyuvBufferPtr = (uint32*) (yuv422Frame->lum+((lLumHeight-1)*(stride)));
+	  pOutputLinePtr= (uint8*)lOutyuvBufferPtr;
+
+    for(i = 0; i < lLumHeight ; i ++)
+	  {
+		j=(lLumWidth >> 1) + 1;
+
+		while (--j)
+		{
+			lCr    = *lCrPtr++;
+			lTemp  = *lLumPtr++; //Y1
+			lCb    = *lCbPtr++;			
+			lY1    = *lLumPtr++; //Y2
+				
+			lCb   |= (lCr << 16);	
+			lTemp |= (lY1 << 16);	
+			*lOutyuvBufferPtr++ = (uint32)((lTemp << 8)|(lCb));
+		}
+	    
+		if(i&1)
+		{		
+			lCbPtr	 -= lLumWidth;
+			lCrPtr	 -= lLumWidth;			
+		}
+		else
+		{
+			lCbPtr	 -= lLumWidth >> 1;
+			lCrPtr	 -= lLumWidth >> 1;
+		}
+
+		lLumPtr -= (lLumWidth << 1);
+		pOutputLinePtr -= stride;
+ 	  lOutyuvBufferPtr = (uint32*) pOutputLinePtr;
+	}
+  return E_SUCCESS;
+}
+
+#else
+__asm int32 IPEmz_sYUV420toUY1VY2(tBaseVideoFrame* yuv420Frame, tBaseVideoFrame* yuv422Frame, int16 stride)
+{
+        STMFD    r13!,{r4-r11,lr}
+        LDR      r12,[r1,#0]
+        LDRH     r1,[r0,#0xc]
+        LDR      r6,[r0,#4]
+        LDR      r5,[r0,#8]
+        LDRH     r4,[r0,#0xe]
+        LSR      r3,r1,#1
+        LDR      lr,[r0,#0]
+                
+        CMP      r2,r3,LSL #2
+        MOVLT    r0,#-16
+        STMLTFD   r13!,{r4-r11,pc}
+        ADD      r0,r2,r2,LSR #31
+        ASR      r0,r0,#1
+        SUB      r2,r4,#1
+        LSL      r11,r0,#2
+        MUL      r0,r3,r2
+        ADD      r1,r4,r4,LSR #31
+        LSL      r0,r0,#1
+        ADD      r0,r0,r0,LSR #31
+        BIC      r0,r0,#1
+        ADD      lr,r0,lr
+        MVN      r0,#0
+        ADD      r0,r0,r1,ASR #1
+        MLA      r1,r3,r0,r6
+        MLA      r0,r3,r0,r5
+        ADD      r5,r11,r11,LSR #31
+        ASR      r5,r5,#1
+        MUL      r2,r5,r2
+        ASR      r5,r2,#31
+        ADD      r2,r2,r5,LSR #30
+        BIC      r2,r2,#3
+        ADD      r12,r2,r12
+        MOV      r2,#0xff00
+        ORR      r10,r2,r2,LSL #16
+        MOV      r5,r3
+outer_loop
+        LDRH     r2,[lr],#2
+        LDRB     r6,[r1],#1
+        LDRB     r7,[r0],#1
+inner_loop
+        SUBS     r5,r5,#1
+        PKHBT    r9,r2,r2,LSL #8
+        PKHBT    r8,r6,r7,LSL #16
+        AND      r9,r10,r9,LSL #8
+        LDRBNE   r7,[r0],#1
+        LDRBNE   r6,[r1],#1
+        LDRHNE   r2,[lr],#2
+        ORR      r8,r9,r8
+        STR      r8,[r12],#4
+        BNE      inner_loop
+        ANDS     r2,r4,#1
+        SUBEQ    r1,r1,r3
+        SUBEQ    r0,r0,r3
+        SUBNE    r0,r0,r3,LSL #1
+        SUBNE    r1,r1,r3,LSL #1
+        SUBS     r4,r4,#1
+        SUB      lr,lr,r3,LSL #2
+        SUB      r12,r12,r11,ASR #1
+        SUB	     r12,r12,r3,LSL #2
+        MOV      r5,r3
+        BNE      outer_loop
+        MOV      r0,#1
+        LDMFD    r13!, {r4-r11,pc}
+
+      }
+#endif
+
+/*
+******************************************************************************
+Name            : gColorSpaceConvertYUV
+Description   : Converts YUV Data to YUV 422 Interleaved format.
+Parameter       : yuv420Frame    - Source structure
+          yuv422Frame  - Pointer to yuv 422 Interleaved data.
+          outClrFmt   - input color format.
+Return Value    : int32
+******************************************************************************
+*/
+
+int32 gColorConvYUVtoYUV422Int (tBaseVideoFrame *yuv420Frame, tBaseVideoFrame* yuv422Frame,
+                 uint8 outClrFmt, int stride)             
+{
+  if( (NULL == yuv420Frame) || (NULL == yuv422Frame) || (NULL == yuv420Frame->lum) ||
+    (NULL == yuv420Frame->cb) || (NULL == yuv420Frame->cr))
+  {
+    return E_OUT_OF_MEMORY;
+  }
+
+  switch(outClrFmt)
+  {
+    case(YUV422INT_LE):
+      return IPEmz_sYUV420toY2VY1U(yuv420Frame, yuv422Frame, stride);
+      
+    case(YUV422INT_BE):
+      return IPEmz_sYUV420toUY1VY2(yuv420Frame, yuv422Frame, stride);
+        
+    default:
+      return E_ERROR_ARGUMENT;
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/ImplementationProxy.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+#include "NGAPostProcHwDevice.h"
+#include "NGAPostProcHwDevice_UID.hrh"
+#include <ecom/implementationproxy.h>
+
+const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KUidNGAPostProcHwDeviceImplUid, CNGAPostProcHwDevice::NewL)
+	};
+
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+
+#ifndef EKA2
+GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+	{
+	return(KErrNone);
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcHwDevice.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,2689 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+
+#include "NGAPostProcHwDevice.h"
+#include "NGAPostProcSessionManager.h"
+#include "NGAPostProcSurfaceHandler.h"
+
+//currently this uid only used if not under WINSCW environment since the only hw to use is bridge
+#define EStUidPixelFormatYUV_420MB  0x2001FBC1
+// post-processor info
+const TUid KUidVideoPostProcHwDevice = {KUidNGAPostProcHwDeviceImplUid};
+_LIT(KManufacturer, "Nokia Inc.");
+_LIT(KIdentifier, "Nokia S60 Video Post Processor Hardware Device Plugin");
+
+// --- Constants ---
+const TInt KMaxVBMBuffers      			= 4;
+const TInt KMinVBMInputWidth   			= 32; 
+const TInt KMinVBMInputHeight  			= 32;
+const TInt KMaxVBMInputWidth   			= 1280; 
+const TInt KMaxVBMInputHeight  			= 720;
+const TInt KRenderAhead 	     		= 50000;     
+const TInt KMaxRenderDelay     			= 50000;
+const TInt KPostingOfset       			= 0;    
+const TInt KColorConversionBuffers  	= 3;
+const TInt KMaxBuffersGceCanHold    	= 3;
+const TInt KDefPlayRate					= 100;
+const TInt KMaxAllowedSkipInNFrames 	= 40;
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+int32 gColorConvYUVtoYUV422Int (tBaseVideoFrame *yuv420Frame, tBaseVideoFrame* yuv422Frame,
+							   uint8 outClrFmt, int16 stride); 
+
+int32 Emz_VDec_gColorConv_YUVtoRGB ( 
+	  tBaseVideoFrame *srcImage, uint8 *dstImage, tWndParam *srcWindow, 
+	  tWndParam *dstWindow, uint8 srcImageFormat, uint8 dstImageFormat,
+	  uint8 colorConvScheme);
+		 	  
+#ifdef __cplusplus
+}
+#endif
+
+//**************************************************
+
+CMMFVideoPostProcHwDevice* CNGAPostProcHwDevice::NewL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice::NewL() ++"));
+
+    CNGAPostProcHwDevice* self = new (ELeave) CNGAPostProcHwDevice; 
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop();
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice::NewL() --"));
+    return (CMMFVideoPostProcHwDevice*)self; 
+}
+
+void CNGAPostProcHwDevice::ConstructL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::ConstructL() ++"), this);
+    
+    // support for VBM buffer interface
+    iVBMBufferOptions.iNumInputBuffers  = KMaxVBMBuffers; 
+    iVBMBufferOptions.iBufferSize = TSize(KMaxVBMInputWidth, KMaxVBMInputHeight);
+    iPostingTimer = CNGAPostProcTimer::NewL(*this);
+    User::LeaveIfError(iWsSession.Connect());
+    
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::ConstructL() --"), this);
+}
+
+CNGAPostProcHwDevice::CNGAPostProcHwDevice() 
+        :   iProxy(NULL), 
+            iInputDecoderDevice(NULL),
+            iCurrentPlaybackPosition(TTimeIntervalMicroSeconds(0)),
+            iPPState(EInitializing),
+            iSurfaceHandler(NULL),
+            iSessionManager(NULL),
+            iIsInputEnded(EFalse),
+            iPostingTimer(NULL),
+            iFirstPictureUpdated(EFalse),
+            iUsingExternalSurface(EFalse),
+            iIsColorConversionNeeded(EFalse),
+            iSurfaceCreatedEventPublished(EFalse),
+            iOverflowPictureCounter(0),
+            iVideoFrameBufSize(0),
+            iResourceLost(EFalse),
+            iRedrawDone(EFalse),
+			iRedrawSurfaceInUse(EFalse),
+            iVBMObserver(NULL),
+            iVBMEnabled(EFalse),        
+            count(0),
+            iSurfaceMask(surfaceHints::EAllowAllExternals),
+            iSurfaceKey(TUid::Uid(surfaceHints::KSurfaceProtection)),
+            iVideoSurfaceObserver(NULL),
+            iVPObserver(NULL),
+            iPicSize(0,0),
+			iAspectRatioNum(1),
+			iAspectRatioDenom(1),
+            iStepFrameCount(0),
+            iPlayRate(KDefPlayRate),
+            iKeyFrameMode(EFalse),
+            iFPObserver(NULL),
+            iIsExternalChunk(EFalse)
+{
+	iSurfaceId 		 = TSurfaceId::CreateNullId();
+
+#if defined __WINSCW__ 
+	iAttributes().iPixelFormat    = EUidPixelFormatYUV_422Interleaved;
+#else    
+	iAttributes().iPixelFormat    = (TUidPixelFormat) EStUidPixelFormatYUV_420MB;
+#endif
+}
+
+CNGAPostProcHwDevice::~CNGAPostProcHwDevice()
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::~CNGAPostProcHwDevice() ++"), this);
+   	if (iSessionManager)
+    {
+        iSessionManager->CancelNotifiers();
+        delete iSessionManager;
+        iSessionManager = NULL;
+    }
+   	
+   	while (iSupportedInputFormats.Count()>0)
+    {
+		iSupportedInputFormats.Remove(0);
+    }
+    
+   	while (iProcessQ.Count()>0)
+    {
+		iProcessQ.Remove(0);
+    }
+
+   	if(iPostingTimer)
+    {
+    	iPostingTimer->Cancel();
+        delete iPostingTimer;
+        iPostingTimer = NULL;
+    }
+    
+    while (iVBMBufferReferenceQ.Count()>0)
+    {
+        TVideoPicture* pic = iVBMBufferReferenceQ[0];
+        iVBMBufferReferenceQ.Remove(0);
+        if (iColorConversionQ.Count()>0)
+    	{
+	        iColorConversionQ.Remove(0);
+	    }
+
+        if (pic->iHeader) delete pic->iHeader;
+        delete pic->iData.iRawData;
+        delete pic;
+    }
+    
+    iSupportedInputFormats.Reset();
+    iSupportedInputFormats.Close();
+    
+    iVBMBufferReferenceQ.Reset();
+    iVBMBufferReferenceQ.Close();
+    
+    iColorConversionQ.Reset();
+    iColorConversionQ.Close();
+    
+    iVBMBufferQ.Reset();
+    iVBMBufferQ.Close();
+    
+    iProcessQ.Reset();
+    iProcessQ.Close();
+        
+    iInputQ.Reset();
+    iInputQ.Close();
+    
+    if (iSurfaceHandler)
+    {
+    	if(!iSurfaceId.IsNull())
+    	{
+    		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::UnregisterSurface"), this);
+			TInt numScreens = iWsSession.NumberOfScreens();
+    		for(TInt i=0;i < numScreens;i++)
+    		{
+    			iWsSession.UnregisterSurface(i, iSurfaceId);
+    		}
+    		iWsSession.Flush();
+        	TInt err = iSurfaceHandler->DestroySurface(iSurfaceId);
+    	}
+        delete iSurfaceHandler;
+        iSurfaceHandler = NULL;
+    }
+    
+    iWsSession.Close();
+    if(!iIsExternalChunk)
+    {
+        iChunk.Close();
+    }
+    
+    RDebug::Printf("------ Statistics of Post Processor ------");
+    RDebug::Printf("    Pictures Received : %d", iPictureCounters.iTotalPictures);
+    RDebug::Printf("    Pictures Displayed: %d", iPictureCounters.iPicturesDisplayed);
+    RDebug::Printf("    Pictures Skipped  : %d", iPictureCounters.iPicturesSkipped);
+    RDebug::Printf("    Pictures overflow : %d", iOverflowPictureCounter);
+    RDebug::Printf("------------------------------------------");
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:~() --"), this);
+}
+
+void CNGAPostProcHwDevice::SetInputFormatL(const TUncompressedVideoFormat&  aFormat) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputFormatL() Pattern= %x ++"), this, aFormat.iYuvFormat.iPattern);
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputFormatL() FAILED: Unexpected state"), this);
+        User::Leave(KErrNotReady);
+    }
+
+		iVideoFormat = aFormat; 
+		if( ((iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma1) ||
+			(iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma2) ||
+    		(iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma3) ))
+		{
+			iVideoFormat.iYuvFormat.iCoefficients  	     = EYuvBt709Range1;
+    		iVideoFormat.iYuvFormat.iPattern       	     = EYuv422Chroma1;
+    		iVideoFormat.iYuvFormat.iDataLayout          = EYuvDataInterleavedBE;
+			
+#if defined __WINSCW__				
+				iIsColorConversionNeeded = ETrue; 
+#else
+				iAttributes().iPixelFormat = (TUidPixelFormat) EStUidPixelFormatYUV_420MB;
+#endif
+		}	
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputFormatL() WARNING: -- Not Found!"), this);
+}
+
+
+void CNGAPostProcHwDevice::SetInputDevice(CMMFVideoDecodeHwDevice* aDevice) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputDevice() ++"), this);
+
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputDevice() FAILED: unexpected state"), this);
+        return;
+	}
+
+    iInputDecoderDevice = aDevice;
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputDevice() --"), this);
+}
+
+void CNGAPostProcHwDevice::GetOutputFormatListL(RArray<TUncompressedVideoFormat>& ) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetOutputFormatListL() ++"), this);
+
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetOutputFormatListL() --"), this);
+}
+
+void CNGAPostProcHwDevice::SetOutputFormatL(const TUncompressedVideoFormat&  ) 
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetOutputFormatL() ++"), this);
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetOutputFormatL() --"), this);
+}
+
+void CNGAPostProcHwDevice::SetClockSource(MMMFClockSource* aClock) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetClockSource() ++"), this);
+    
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetClockSource() FAILED: Unexpected state"), this);
+        return;
+	}
+    iClockSource = aClock;
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetClockSource() --"), this);
+}
+
+void CNGAPostProcHwDevice::SetVideoDestScreenL(TBool /*aScreen*/) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetVideoDestScreenL() ++"), this);
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetVideoDestScreenL() --"), this);
+}
+
+void CNGAPostProcHwDevice::SetProxy(MMMFDevVideoPlayProxy& aProxy) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetProxy() ++"), this);
+
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetProxy() FAILED: Unexpected state"), this);
+        return;
+	}
+
+    iProxy = &aProxy;
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetProxy() --"), this);
+}
+
+void CNGAPostProcHwDevice::Initialize() 
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize ++"));
+	TInt err = KErrNone;
+
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize() FAILED: Unexpected state"), this);
+        if (iProxy)
+		{
+			iProxy->MdvppInitializeComplete(this, KErrNotReady);
+		}
+		return;
+	}
+	if (!iSurfaceHandler)
+    {
+    	TRAP(err, iSurfaceHandler = CNGAPostProcSurfaceHandler::NewL());
+    	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create SurfaceHandler."), this);
+    	    if (iProxy)
+			{
+				iProxy->MdvppInitializeComplete(this, err);
+			}
+			return;
+    	}
+    }
+    if (!iSessionManager)
+    {
+    	TRAP(err, iSessionManager = CNGAPostProcSessionManager::NewL());
+    	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create SessionManager."), this);
+    	    if (iProxy)
+			{
+				iProxy->MdvppInitializeComplete(this, err);
+			}
+			return;
+    	}
+    	iSessionManager->SetObserver(*this);
+    }
+
+  	if (iInputDecoderDevice)
+	{
+		MMmfVideoResourceHandler* handler = NULL;
+		handler = (MMmfVideoResourceHandler*)iInputDecoderDevice->CustomInterface(KUidMmfVideoResourceManagement);
+		if (handler)
+		{
+			handler->MmvrhSetObserver((MMmfVideoResourceObserver*)this);
+		}
+		else
+		{
+			PP_DEBUG(_L("ppHwDev[%x]:Initialize() decoder yet to implement MMmfVideoResourceHandler CI"), this);
+		}
+		
+		MMmfVideoPropertiesNotifier* VPHandler = NULL;
+		VPHandler = (MMmfVideoPropertiesNotifier*)iInputDecoderDevice->CustomInterface(KUidMmfVideoPropertiesManagement);
+		if (VPHandler)
+		{
+			PP_DEBUG(_L("ppHwDev[%x]:Initialize() Register for video property changes"), this);
+			VPHandler->MmvpnSetObserver((MMmfVideoPropertiesObserver*)this);
+		}
+		else
+		{
+			PP_DEBUG(_L("ppHwDev[%x]:Initialize() decoder yet to implement MMmfVideoPropertiesNotifier CI"), this);
+		}
+	}
+		
+    // Initialize picture counters
+	iPictureCounters.iPicturesSkipped 	= 0;
+	iPictureCounters.iPicturesDisplayed = 0;
+	iPictureCounters.iTotalPictures = 0;
+	iOverflowPictureCounter = 0;
+	
+	iPPState = EInitialized;
+	if(iPostInitializeResponse)
+	{
+		
+		TRAP(err, iPostInitializeResponse->MmpirPostInitializeResponseL());
+	}
+	
+	if(!err)
+	{
+		TRAP(err, iSessionManager->CreateNotifierL(iInfo().iBuffers));
+	}
+	else
+	{
+		iPPState = EInitializing;
+	}
+	
+	if (iProxy)
+	{
+		iProxy->MdvppInitializeComplete(this, err);
+	}
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize --"), this);
+}
+
+void CNGAPostProcHwDevice::WritePictureL(TVideoPicture* aPicture) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePicture bufId = %d"), this,GetID(aPicture));
+	TVideoPicture* pic;
+	if (iPPState==EInitializing || iPPState==EStopped || iIsInputEnded)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePictureL() FAILED: Unexpected state"), this);
+        User::Leave(KErrNotReady);
+	}
+
+    if(!aPicture)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePictureL() FAILED: Invalid argument"), this);
+		User::Leave(KErrArgument);
+	}
+	pic = aPicture;	
+	iPictureCounters.iTotalPictures++;
+	if((iPPState != EPlaying) && (iFirstPictureUpdated))
+	{
+	//If decoder is fast enough, it can happen between Initialize->Start time gap between 
+	//DecodeHwDevice and PostProc_HwDevice. OR between Pause->Resume time gap as well.
+		AddToQ(pic);
+	}
+	else if( iInputQ.Count() > 0 )
+	{
+		AddToQ(pic);
+		AttemptToPost();
+	}
+	else
+	{
+		TTimeToPost timeToPost = EPostIt;
+		TInt64 delta = 0;
+	    if(iFirstPictureUpdated)
+		{
+			timeToPost = (TTimeToPost)IsTimeToPost(pic, delta);
+			if(!IsGceReady())
+		    {  
+				PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePictureL GCE not ready"), this );
+				if(timeToPost == EPostIt)
+				{
+                    timeToPost = EDelayIt;
+				}
+		    }
+		    if (delta > 0x7FFFFFFF)
+		    {
+		         PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePictureL Too large delta .. skipping"), this ); 
+		         timeToPost = ESkipIt;
+		    }
+		}
+		else
+		{
+			if(!iSurfaceCreatedEventPublished)
+                {
+                    PublishSurfaceCreated();
+                }
+			iFirstPictureUpdated = ETrue;
+		}
+		
+
+		switch(timeToPost)
+		{
+			case EDelayIt:
+			{
+				if(AddToQ(pic) != 0)
+				{
+					break;
+				}
+				iPostingTimer->Cancel();
+				SetTimer(delta);
+			}
+			break;
+			case EPostIt:
+			{
+		
+				if(iIsColorConversionNeeded)
+				{
+					TVideoPicture* ccPic;				
+	    			ccPic = DoColorConvert(pic); // output will be in ccPic
+	    			pic = ccPic;			   
+				}
+						
+				#ifdef _DUMP_YUV_FRAMES
+				captureYuv(pic);
+				#endif
+				TInt err = iSessionManager->PostPicture(iSurfaceId, GetID(pic), ETrue); 
+				if(err == KErrNone)
+				{
+				    iProcessQ.Append(pic);
+					iCurrentPlaybackPosition = pic->iTimestamp;
+				}
+				else
+				{
+					ReleasePicture(pic);
+				}
+			}
+			break;
+			case ESkipIt:
+			{
+				ReleasePicture(pic); 
+				PicturesSkipped();
+			}
+			break;
+		}
+    }
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePicture --"), this);
+}
+
+
+CPostProcessorInfo* 
+CNGAPostProcHwDevice::PostProcessorInfoLC() 
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PostProcessorInfoLC() ++"), this);
+    TUncompressedVideoFormat yuvFormat;
+    RArray<TUint32>                     SupportedPostProcess;
+    TBool                               SupportedHwAcceleration = ETrue;   //Non-Accelerated ETrue, 
+    TYuvToRgbCapabilities               SupportedYuvToRgbCapab; 
+    TInt32                              SupportedRotations = ERotateNone; // no rotation supported
+    
+    TBool                               SupportedArbitraryScaling = EFalse; // no scaling supported
+    RArray<TScaleFactor>                SupportedScaleFactors;
+    TBool                               SupportedAntiAliasing = EFalse;
+    
+    //default
+    yuvFormat.iDataFormat                     = EYuvRawData;
+    yuvFormat.iYuvFormat.iYuv2RgbMatrix       = 0;
+    yuvFormat.iYuvFormat.iRgb2YuvMatrix       = 0;
+    yuvFormat.iYuvFormat.iAspectRatioNum      = 1;
+    yuvFormat.iYuvFormat.iAspectRatioDenom    = 1;
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout          = EYuvDataInterleavedBE;
+    
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedBE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedLE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+            
+	yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedLE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+            
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedBE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedBE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+            
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedLE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataInterleavedLE;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv422Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+    
+    //YUV 420 planar
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataPlanar;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma3;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt709Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataPlanar;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma3;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range1;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataPlanar;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma3;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iCoefficients  	  = EYuvBt601Range0;
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma1;
+    yuvFormat.iYuvFormat.iDataLayout    	  = EYuvDataPlanar;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma2;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+
+    yuvFormat.iYuvFormat.iPattern       	  = EYuv420Chroma3;
+    User::LeaveIfError(iSupportedInputFormats.Append(yuvFormat));
+            
+    CPostProcessorInfo* postProcessorInfo = CPostProcessorInfo::NewL( 
+                KUidVideoPostProcHwDevice, 
+                KManufacturer, 
+                KIdentifier, 
+                TVersion(1, 0, 0), 
+                iSupportedInputFormats.Array(),
+                SupportedPostProcess.Array(), 
+                SupportedHwAcceleration,   
+                ETrue,      //Direct Display
+                SupportedYuvToRgbCapab, 
+                SupportedRotations, 
+                SupportedArbitraryScaling,
+                SupportedScaleFactors.Array(), 
+                SupportedAntiAliasing);
+                
+    CleanupStack::PushL(postProcessorInfo);            
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PostProcessorInfoLC() --"), this);
+    return postProcessorInfo;
+}
+
+void CNGAPostProcHwDevice::MmvprcGetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCap)
+{       
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcGetPlayRateCapabilitiesL ++"), this);       
+     aCap.iPlayForward = ETrue;       
+     aCap.iPlayBackward = ETrue;       
+     aCap.iStepForward = ETrue;       
+     aCap.iStepBackward = ETrue;       
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcGetPlayRateCapabilitiesL --"), this);       
+}       
+
+void CNGAPostProcHwDevice::MmvprcSetPlayRateL(const TInt aRate)
+{       
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcSetPlayRateL ++"), this);       
+     iPlayRate = aRate;
+     if (iPlayRate<0)        
+     {       
+         iKeyFrameMode = ETrue;    
+     }       
+     else        
+     {       
+         iKeyFrameMode = EFalse;   
+         ResetCountingBuffer();       
+     }       
+     //In fast forward go direct to key frame mode if speed >4X =     
+    if (iPlayRate>KDefPlayRate*4)
+     {       
+         if (iFPObserver)        
+         {       
+             iFPObserver->MmvproKeyFrameModeRequest();       
+             iKeyFrameMode=ETrue;       
+         }       
+     }       
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcSetPlayRateL=%d --"), this, aRate);       
+}       
+
+TInt CNGAPostProcHwDevice::MmvprcPlayRateL()
+{       
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcPlayRateL= ++"), this);       
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcPlayRateL= --"), this);       
+    return iPlayRate;       
+}       
+
+void CNGAPostProcHwDevice::MmvprcStepFrameL(const TInt aStep)
+{       
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcStepFrameL= ++"), this);       
+    iStepFrameCount = aStep;       
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcStepFrameL=%d --"), this, aStep);       
+}       
+
+void CNGAPostProcHwDevice::MmvprcSetObserver(MMmfVideoPlayRateObserver& aObserver)
+{       
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcSetObserver ++"), this);       
+    iFPObserver  = &aObserver;
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvprcSetObserver --"), this);
+} 
+
+void CNGAPostProcHwDevice::MmvsoSetSecureOutputL(TBool aSecure)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvsoSetSecureOutputL aSecure = %d++"), this, aSecure);     
+	TInt err = KErrNone;  
+    if(aSecure)
+	{
+		iSurfaceMask = surfaceHints::EAllowInternalOnly;
+	}
+	else
+	{
+		iSurfaceMask = surfaceHints::EAllowAllExternals;
+	}
+	if(!iSurfaceId.IsNull())
+	{
+		err = AddHints();
+		if(err != KErrNone)
+		{
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvsoSetSecureOutputL -- leaving err = %d"), this, err);
+			User::Leave(err);
+		}
+	}
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvsoSetSecureOutputL --"), this);
+}
+
+void CNGAPostProcHwDevice::MmavsoSetAllowedOutputL(TUint aAllowedOutputMask)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmavsoSetAllowedOutputL aAllowedOutputMask=0x%08x ++"), this,aAllowedOutputMask);  
+   TInt err = KErrNone;
+   iSurfaceMask = surfaceHints::EAllowInternalOnly;
+    if (aAllowedOutputMask == EVideoAllowAll)
+    {
+        iSurfaceMask = surfaceHints::EAllowAllExternals;
+    }
+    else if (aAllowedOutputMask == EVideoAllowInternalOnly)
+    {
+        iSurfaceMask = surfaceHints::EAllowInternalOnly;
+    }
+    else 
+    {
+        // we hope to find some valid output prefs
+        if (aAllowedOutputMask & EVideoAllowAnalog)
+        {
+            iSurfaceMask |= surfaceHints::EAllowAnalog;
+        }
+        if (aAllowedOutputMask & EVideoAllowMacroVision)
+        {
+            iSurfaceMask |= surfaceHints::EAllowAnalogProtectionRequired;
+        }
+        if (aAllowedOutputMask & EVideoAllowHDMI)
+        {
+            iSurfaceMask |= surfaceHints::EAllowDigital;
+        }
+        if (aAllowedOutputMask & EVideoAllowHdmiHdcpRequested)
+        {
+            iSurfaceMask |= surfaceHints::EAllowDigitalProtectionRequested;
+        }
+        if (aAllowedOutputMask & EVideoAllowHdmiHdcpRequired)
+        {
+            iSurfaceMask |= surfaceHints::EAllowDigitalProtectionRequired;
+        }
+    }
+    
+	if((!iSurfaceId.IsNull()))
+	{
+		err = AddHints();
+		if(err != KErrNone)
+		{
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmavsoSetAllowedOutputL -- leaving err = %d"), this, err);
+			User::Leave(err);
+		}
+	}
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmavsoSetAllowedOutputL --"), this);
+}	
+
+void CNGAPostProcHwDevice::SetPostProcessTypesL(TUint32 /*aCombination*/) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetPostProcessTypesL ++"), this);
+	
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetPostProcessTypesL --"), this);
+}
+
+void CNGAPostProcHwDevice::SetInputCropOptionsL(const TRect& /*aRect*/) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputCropOptionsL ++"), this);
+   
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetInputCropOptionsL --"), this);
+}    
+
+void CNGAPostProcHwDevice::SetYuvToRgbOptionsL( const TYuvToRgbOptions&  /*aOptions*/, const TYuvFormat& /*aYuvFormat*/, TRgbFormat /*aRgbFormat*/) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetYuvToRgbOptionsL ++"), this);
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetYuvToRgbOptionsL --"), this);
+}
+
+void CNGAPostProcHwDevice::SetYuvToRgbOptionsL(const TYuvToRgbOptions& /*aOptions*/)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetYuvToRgbOptionsL ++"), this);
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetYuvToRgbOptionsL --"), this);
+}
+
+void CNGAPostProcHwDevice::SetRotateOptionsL(TRotationType ) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetRotateOptionsL ++"), this);
+    
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetRotateOptionsL --"));
+}
+
+void CNGAPostProcHwDevice::SetScaleOptionsL(const TSize& /*aTargetSize*/, TBool /*aAntiAliasFiltering*/) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetScaleOptionsL ++"), this);
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetScaleOptionsL --"), this);
+}
+
+void CNGAPostProcHwDevice::SetOutputCropOptionsL(const TRect& /*aRect*/) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetOutputCropOptionsL ++"), this);
+    
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetOutputCropOptionsL --"), this);
+}
+
+void CNGAPostProcHwDevice::SetPostProcSpecificOptionsL(const TDesC8& ) 
+{ 
+    //ignore 
+}
+
+void CNGAPostProcHwDevice::CommitL() 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CommitL ++"), this);
+
+   	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CommitL --"), this);
+}
+
+void CNGAPostProcHwDevice::Revert() 
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Revert ++"), this);
+    
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Revert --"), this);
+}
+
+void CNGAPostProcHwDevice::StartDirectScreenAccessL( const TRect& /*aVideoRect*/, CFbsScreenDevice& /*aScreenDevice*/, const TRegion& /*aClipRegion*/) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:StartDSA ++"), this);
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:StartDSA --"), this);
+}
+
+void CNGAPostProcHwDevice::AbortDirectScreenAccess() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AbortDSA ++"), this);
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AbortDSA --"), this);
+}
+
+void CNGAPostProcHwDevice::SetScreenClipRegion(const TRegion& /*aRegion*/) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetScreenClipRegion ++"), this);
+    
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetScreenClipRegion --"), this);
+}		    
+
+void CNGAPostProcHwDevice::SetPauseOnClipFail(TBool ) 
+{ 
+    //ignore. Post Processor will always behave as aPause==False. 
+}
+
+TBool CNGAPostProcHwDevice::IsPlaying()
+{
+	if( iPPState == EPlaying)
+	{
+    	return ETrue; 
+    }
+    else
+    {
+    	return EFalse;
+    }
+}
+
+void CNGAPostProcHwDevice::Redraw() 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw ++"), this);
+	TInt err = KErrNone;
+	if(iRedrawSurfaceInUse && !iRedrawDone)
+	{
+        err = AddHints();
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw -- failed to AddHints %d"), 
+                         this, err);
+            iProxy->MdvppFatalError(this, err);	
+            return;   
+        }
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw registering the temp surface"), this);
+		err = RegisterSurface(iSurfaceId);
+		if (err != KErrNone)
+		{
+		   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw -- failed to Register Surface %d"), 
+		   				this, err);
+		   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   		iSurfaceId = TSurfaceId::CreateNullId();
+			iProxy->MdvppFatalError(this, err);	
+			return;   				
+		}
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw registering the temp surface done"), this);
+        err = iSessionManager->PostPicture(iSurfaceId, 0, EFalse);
+		if (err != KErrNone)
+		{
+			iProxy->MdvppFatalError(this, err);	
+			return;
+		}
+        PublishSurfaceCreated();
+        iRedrawDone = ETrue;
+    }
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw --"), this);
+}
+
+void CNGAPostProcHwDevice::Start() 
+{  
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Start ++"), this);
+	iPPState = EPlaying;
+	
+	//TBC: when buffers given to post proc even before start. 
+	//Even the buffers must be available to PostProc but not displayed. 
+	//This will happen only when neighbouring decodeHwDevice decodes earlier than Start()
+	//call. Need to check if MDF guidelines allow this.
+	AttemptToPost();
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Start --"), this);
+}
+
+void CNGAPostProcHwDevice::Stop() 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Stop ++"), this);
+    iPPState = EStopped;
+	if (iSessionManager)
+	{
+	    iSessionManager->CancelNotifiers();
+	}
+	if (iPostingTimer)
+	{
+        iPostingTimer->Cancel();
+	}
+	ReleaseProcessQ();
+	ReleaseInputQ();
+
+	//Stop must keep on displaying the last frame. Blank Screen must not be visible
+	//to client. No Unregistering of surface should happen here. 
+	//This Req is not necessary anymore. Only applicable to Pause.
+	
+	RDebug::Printf("------ Statistics of Post Processor ------");
+    RDebug::Printf("    Pictures Received : %d", iPictureCounters.iTotalPictures);
+    RDebug::Printf("    Pictures Displayed: %d", iPictureCounters.iPicturesDisplayed);
+    RDebug::Printf("    Pictures Skipped  : %d", iPictureCounters.iPicturesSkipped);
+    RDebug::Printf("------------------------------------------");
+    
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Stop --"), this);
+}
+
+void CNGAPostProcHwDevice::Pause()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Pause ++"), this);
+	iPPState = EPaused;
+    iPostingTimer->Cancel();
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Pause --"), this);
+}
+
+void CNGAPostProcHwDevice::Resume()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Resume ++"), this);
+	iPPState = EPlaying;
+	AttemptToPost();
+   	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Resume --"), this);
+}
+
+void CNGAPostProcHwDevice::SetPosition(const TTimeIntervalMicroSeconds& aPlaybackPosition) 
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetPosition ++"), this);
+    
+    if (iPPState == EInitializing)
+    { 
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetPosition FAILED: Unexpected state"), this);
+        return;
+    }
+    if (iPPState == EPaused)
+    {	
+        iFirstPictureUpdated = EFalse;
+    }
+    iCurrentPlaybackPosition = aPlaybackPosition;  
+    
+    ReleaseInputQ();
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetPosition --"), this);
+}
+
+void CNGAPostProcHwDevice::FreezePicture(const TTimeIntervalMicroSeconds& ) 
+{ 
+    //TODO:
+}
+
+void CNGAPostProcHwDevice::ReleaseFreeze(const TTimeIntervalMicroSeconds&  ) 
+{ 
+    //TODO:
+}
+
+TTimeIntervalMicroSeconds 
+CNGAPostProcHwDevice::PlaybackPosition() 
+{ 
+	if (iPPState == EInitializing)
+    {
+        return TTimeIntervalMicroSeconds(0);
+    }
+    
+    return iCurrentPlaybackPosition; 
+}
+
+TUint CNGAPostProcHwDevice::PictureBufferBytes() 
+{   //TODO 
+    return 0; 
+}
+
+void CNGAPostProcHwDevice::GetPictureCounters( CMMFDevVideoPlay::TPictureCounters&  aCounters) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetPictureCounters ++"), this);
+	
+	if (iPPState == EInitializing)
+		return;
+	aCounters = iPictureCounters;
+	
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetPictureCounters --"), this);
+}
+
+void CNGAPostProcHwDevice::SetComplexityLevel(TUint ) 
+{ 
+    //not required 
+}
+
+TUint CNGAPostProcHwDevice::NumComplexityLevels() 
+{ 
+    //not required 
+    return 1; 
+}
+
+void CNGAPostProcHwDevice::GetComplexityLevelInfo(TUint , CMMFDevVideoPlay::TComplexityLevelInfo& ) 
+{ 
+    //not required 
+}
+
+void CNGAPostProcHwDevice::ReturnPicture(TVideoPicture* ) 
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReturnPicture +-"), this);
+    //not required for direct rendering 
+}
+
+TBool CNGAPostProcHwDevice::GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& /*aFormat*/)
+{ 
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetSnapshotL %d %d ++"), this, iVBMEnabled, iProcessQ.Count());
+	TVideoPicture* 		pic = NULL;
+	TInt 				err = KErrNone;
+	TBool				frameAvailable =EFalse;
+	tWndParam			inputCropWindow;
+	tWndParam			outputCropWindow;
+	tBaseVideoFrame		inputFrame;
+	inputFrame.lum 		= NULL; 
+	
+	if(aPictureData.iDataFormat == ERgbFbsBitmap)
+	{	
+		if(iProcessQ.Count())
+		{
+			pic = iProcessQ[0]; //frame already submitted for display
+		}
+		else if(iInputQ.Count())
+		{
+			pic = iInputQ[0]; //frame yet to be displayed
+		}
+		if(pic) 
+		{
+			if (iVBMEnabled)
+		    {
+				inputFrame.lum	= (TUint8*)pic->iData.iRawData->Ptr();
+			}
+			else
+			{
+				if (iInputDecoderDevice)
+				{
+					MMmfVideoFetchFrame* VFHandler = NULL;
+					VFHandler = (MMmfVideoFetchFrame*)iInputDecoderDevice->CustomInterface(KUidMMFVideoFetchFrame);
+					if (VFHandler)
+					{
+						PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetSnapshotL() fetch frame"), this);
+						inputFrame.lum = (TUint8*)VFHandler->MmvffGetFrame(GetID(pic));
+					}
+					else
+					{
+						PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetSnapshotL() decoder yet to implement MMmfVideoFetchFrame CI"), this);
+					}
+				}
+			}
+		}
+		if(inputFrame.lum)
+		{
+			inputFrame.cb	= inputFrame.lum + iPicSize.iWidth * iPicSize.iHeight;
+			
+			if( ((iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma1) ||
+				(iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma2) ||
+	    		(iVideoFormat.iYuvFormat.iPattern == EYuv420Chroma3) ))						
+			{
+				inputFrame.cr = inputFrame.lum + (iPicSize.iWidth * iPicSize.iHeight*5)/4;
+			}
+			else
+			{
+				inputFrame.cr = inputFrame.lum + (iPicSize.iWidth * iPicSize.iHeight*3)/2;
+			}
+			
+			inputFrame.width	= (unsigned short)iPicSize.iWidth;
+			inputFrame.height	= (unsigned short)iPicSize.iHeight;
+			
+			outputCropWindow.wndHeight  = iPicSize.iHeight;	
+			outputCropWindow.wndWidth	= iPicSize.iWidth; 	
+			outputCropWindow.xOffset	= 0;
+			outputCropWindow.yOffset	= 0;
+			
+			inputCropWindow.wndHeight  = iPicSize.iHeight;	
+			inputCropWindow.wndWidth	= iPicSize.iWidth; 	
+			inputCropWindow.xOffset	= 0;
+			inputCropWindow.yOffset	= 0;
+			
+			RFbsSession fbs;
+			User::LeaveIfError(fbs.Connect());
+			CFbsBitmap* iOutBitmap = aPictureData.iRgbBitmap;
+			TInt status = iOutBitmap->Resize(iPicSize);
+			if (status == KErrNone)
+			{
+				// Lock the heap to prevent the FBS server from invalidating the address
+		        iOutBitmap->LockHeap();
+		        TUint8* dataAddress = (TUint8*)iOutBitmap->DataAddress();
+				err = ColorConvert(&inputFrame, dataAddress, &inputCropWindow, &outputCropWindow);
+				iOutBitmap->UnlockHeap();
+				frameAvailable = ETrue;
+			}
+			fbs.Disconnect();
+		}
+	}
+	else
+	{
+		err = KErrNotSupported;
+	}
+	if(err != KErrNone)
+	{
+		User::Leave(err);
+	}
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:GetSnapshotL --"), this);
+	return(frameAvailable);
+}
+
+void CNGAPostProcHwDevice::InputEnd() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:InputEnd ++"), this);
+    
+	if (iPPState!=EPlaying && iPPState!=EPaused)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:InputEnd FAILED: Unexpected state"), this);
+        return;
+	}
+    iIsInputEnded = ETrue;
+    
+    if( (iProcessQ.Count() <= 1) && (iInputQ.Count() == 0))
+        {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:InputEnd() Stream end"), this);
+		iProxy->MdvppStreamEnd();
+	}
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:InputEnd --"), this);
+}
+
+TAny* CNGAPostProcHwDevice::CustomInterface(TUid aInterface)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CustomInterface UID = %d ++"), this, aInterface.iUid);
+	
+	if (aInterface == KUidMmfVideoBufferManagement)
+    {
+      return (MMmfVideoBufferManagement *)this;
+    }
+	if (aInterface == KUidMMFVideoSurfaceSupport)
+	{
+      return (MMMFVideoSurfaceSupport *)this;
+    }
+	if (aInterface == KUidMMFVideoSurfaceHandleControl)
+	{
+    	return (MMmfVideoSurfaceHandleControl *)this;
+  }    
+    if (aInterface == KUidMmfVideoPlayRateControl)
+    {
+      return (MMmfVideoPlayRateControl *)this;
+    } 
+    if (aInterface == KMmfVideoAdvancedSecureOutputUid)
+    {
+      return (MMmfAdvancedVideoSecureOutput *)this;
+    }
+    if (aInterface == KUidMmfVideoResourceManagement)
+    {
+      return (MMmfVideoResourceObserver *)this;
+    } 
+    if (aInterface == KUidMmfPostInitializeRequest)
+    {
+      return (MMmfPostInitializeRequest *)this;
+    }
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CustomInterface --"), this);
+    return NULL;
+}
+
+void CNGAPostProcHwDevice::BufferAvailable(TInt aBufId, TInt aStatus)
+{ 
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CNGAPostProcHwDevice::BufferAvailable aStatus = %d aBufId = %d++"), this, aStatus, aBufId);
+    TVideoPicture* pic = NULL;
+    if((aStatus != KErrNone) && (aStatus != KErrOverflow) && (aStatus != KErrNotVisible))
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:BufferAvailable FAILED: aStatus = %d"), this, aStatus);
+		iProxy->MdvppFatalError(this, aStatus);
+	}
+
+	if(aStatus == KErrOverflow)
+	{
+		iOverflowPictureCounter++;
+		PicturesSkipped();
+	}
+    	
+    if (iVBMEnabled)
+    {
+		for(TInt i=0; i < iProcessQ.Count(); i++)
+		{
+			if(iVBMBufferReferenceQ[aBufId] == iProcessQ[i])
+			{
+				pic = iProcessQ[i];
+				iProcessQ.Remove(i);				
+				ReturnPicToDecoder(pic);
+				if (iIsColorConversionNeeded)
+				{
+				    AddPictureToColorConversionQ(pic);
+				}
+				else
+				{
+				    AddPictureToVBMQ(pic);
+				}
+				break;
+			}
+		} 
+	}
+	else
+	{
+	    for(TInt i=0; i < iProcessQ.Count(); i++)
+		{
+			TInt bufId;
+			if (iUsingExternalSurface)
+			{
+				bufId = GetExternalBufferID(iProcessQ[i]);
+			}
+			else
+			{
+				bufId = GetID(iProcessQ[i]);
+			}
+			
+			if (aBufId == bufId)
+			{
+				pic = iProcessQ[i];
+				iProcessQ.Remove(i);
+				ReturnPicToDecoder(pic);
+				break;
+			}
+		} 
+	}
+	
+	if(aStatus == KErrNone)
+	{
+		if (!iKeyFrameMode && iPlayRate>KDefPlayRate)     
+		{   
+		 	if (iSkippedFramesCountingBuffer[iCurrentPosInFramesCountingBuffer]==1)        
+		 	{       
+		 		iSkippedFramesCountingBuffer[iCurrentPosInFramesCountingBuffer] = 0;       
+		 		iSkippedFramesInLast64Frames--;       
+		 	}       
+		 	iCurrentPosInFramesCountingBuffer = ++iCurrentPosInFramesCountingBuffer%64;       
+		} 
+		iPictureCounters.iPicturesDisplayed++;
+		if (iStepFrameCount != 0)
+        {       
+        	iStepFrameCount > 0 ? iStepFrameCount-- : iStepFrameCount++;		            	      
+            if (iStepFrameCount==0 && iFPObserver)        
+            {       
+            	iFPObserver->MmvproStepFrameComplete(pic->iTimestamp);       
+            }       
+        }
+	}
+	
+	if(iPPState == EPlaying)
+	{
+		AttemptToPost();
+	}
+
+	if( iIsInputEnded && (iProcessQ.Count() <= 1)  && (iInputQ.Count() == 0))
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:BufferAvailable() Stream end"), this);
+		iProxy->MdvppStreamEnd();
+	}
+	
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:CNGAPostProcHwDevice::BufferAvailable --"), this);
+}
+
+//=== MMmfVideoBufferManagement ===
+void CNGAPostProcHwDevice::MmvbmSetObserver(MMmfVideoBufferManagementObserver* aObserver)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetObserver() ++"), this);
+
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetObserver FAILED: Unexpected state"), this);
+        iProxy->MdvppFatalError(this, KErrNotReady);
+	}
+
+    iVBMObserver  = aObserver;
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetObserver() --"), this);
+}
+    
+
+void CNGAPostProcHwDevice::MmvbmEnable(TBool aEnable)
+{
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmEnable FAILED: Unexpected state"), this);
+        iProxy->MdvppFatalError(this, KErrNotReady);
+	}
+
+    iVBMEnabled = aEnable;
+}
+    
+void CNGAPostProcHwDevice::MmvbmSetBufferOptionsL(const TBufferOptions& aOptions)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetBufferOptionsL ++"), this);
+
+    if (iPPState != EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetBufferOptionsL FAILED: Unexpected state"), this);
+        User::Leave(KErrNotReady);
+	}
+
+    // why limiting the number of buffers? any particular reason for this?
+    //if (aOptions.iNumInputBuffers > KMaxVBMBuffers || aOptions.iNumInputBuffers <= 1)          //at least two buffers
+    if (aOptions.iNumInputBuffers <= 1)          //at least two buffers
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetBufferOptionsL FAILED: Input buffer count limit"), this);
+        User::Leave(KErrNotSupported);
+	}
+
+    if (aOptions.iNumInputBuffers == 0 
+        || aOptions.iBufferSize.iWidth <= KMinVBMInputWidth 
+        || aOptions.iBufferSize.iHeight <= KMinVBMInputHeight  
+        || aOptions.iBufferSize.iWidth > KMaxVBMInputWidth 
+        || aOptions.iBufferSize.iHeight > KMaxVBMInputHeight)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetBufferOptionsL FAILED: Unexpected buffer size"), this);
+        User::Leave(KErrArgument);
+	}
+
+    iVBMBufferOptions.iNumInputBuffers  = aOptions.iNumInputBuffers;
+    iVBMBufferOptions.iBufferSize       = aOptions.iBufferSize;
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmSetBufferOptionsL --"), this);
+}
+
+void CNGAPostProcHwDevice::MmvbmGetBufferOptions(TBufferOptions& aOptions)
+{
+    if (iPPState == EInitializing)
+    {
+    	aOptions = iVBMBufferOptions;
+    }
+    else
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferOptions FAILED: Unexpected state"), this);
+        iProxy->MdvppFatalError(this, KErrNotReady);
+	}
+}
+    
+TVideoPicture* CNGAPostProcHwDevice::MmvbmGetBufferL(const TSize& aSize)
+    {
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() ++"), this);
+    
+    TInt err = KErrNone;
+    TVideoPicture* lPic = NULL;
+
+    if (iPPState == EInitializing)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() FAILED: Unexpected state"), this);
+        User::Leave(KErrNotReady);
+	  }
+
+    if (aSize.iWidth < KMinVBMInputWidth 
+        || aSize.iHeight < KMinVBMInputHeight
+        || aSize.iWidth > iVBMBufferOptions.iBufferSize.iWidth 
+        || aSize.iHeight > iVBMBufferOptions.iBufferSize.iHeight)
+  	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() FAILED: Unexpected buffer size w=%d h=%d "), this,aSize.iWidth,aSize.iHeight );
+        User::Leave(KErrNotSupported);
+		}
+		
+		if(iVBMBufferReferenceQ.Count() == 0)
+		{
+			iPicSize = aSize;
+			err = SetupSurface();
+			if(err)
+			{
+					PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() Surface Setup Failed %d"), this, err);
+					User::Leave(err);
+			}
+		}
+		
+    if(!iVBMBufferQ.Count())
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() WARNING: Queue buffer count zero"), this);
+        return NULL;
+    }
+
+    lPic    = iVBMBufferQ[0];
+    iVBMBufferQ.Remove(0);
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmGetBufferL() -- %d"), this, lPic);
+    return lPic;
+}
+    
+void CNGAPostProcHwDevice::MmvbmReleaseBuffer(TVideoPicture* aBuffer)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmReleaseBuffer() ++"), this);
+
+    if(!aBuffer)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmReleaseBuffer() FAILED: Invalid buffer ptr"), this);
+    	iProxy->MdvppFatalError(this, KErrArgument);
+	}
+
+    TInt err = iVBMBufferQ.Append(aBuffer);
+    if (err)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmReleaseBuffer() FAILED: Failed to append"), this);
+		iProxy->MdvppFatalError(this, err);
+	}
+
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvbmReleaseBuffer() --"), this);
+}
+
+//=== MMMFVideoSurfaceSupport ===
+
+void CNGAPostProcHwDevice::MmvssUseSurfaces()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssUseSurfaces() ++"), this);
+	// do nothing
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssUseSurfaces() --"), this);
+}
+
+TInt CNGAPostProcHwDevice::MmvshcCreateSurface(const RSurfaceManager::TSurfaceCreationAttributes& aAttributes, TInt aHandle, TSurfaceId& aSurfaceId)
+    {
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcCreateSurface() ++"), this);
+    TInt err(KErrNone);
+    
+    if(!iSurfaceId.IsNull())
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssCreateSurface Cleaning Surface"), this);
+        
+		if (iVideoSurfaceObserver && iSurfaceCreatedEventPublished)
+		{
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcCreateSurface - Telling client to remove old surface"), this);
+			iVideoSurfaceObserver->MmvsoRemoveSurface();
+			iSurfaceCreatedEventPublished = EFalse;
+		}
+		else
+		{
+			// We never told the client about the surface, so we must destroy it ourselves
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface - Destroying old surface"), this);
+			TInt numScreens = iWsSession.NumberOfScreens();
+    		for(TInt i=0;i < numScreens;i++)
+    		{
+    			iWsSession.UnregisterSurface(i, iSurfaceId);
+    		}
+   			iWsSession.Flush();
+			iSurfaceHandler->DestroySurface(iSurfaceId);
+		}
+		//remove any handle to chunk. not needed perhaps
+		iChunk.Close();
+		
+    }
+        
+    // Create the surface handler if it doesn't exist.
+    if (!iSurfaceHandler)
+    {
+        TRAP(err, iSurfaceHandler = CNGAPostProcSurfaceHandler::NewL());
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssCreateSurface -- failed to create SurfaceHandler."), this);
+            return err;
+        }
+    }
+         
+    iChunk.SetHandle(aHandle);
+    err = iSurfaceHandler->CreateSurface(aAttributes, aSurfaceId, iChunk);
+    if (err != KErrNone)
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssCreateSurface -- failed to create surface %d"), this, err);
+       return err;
+    }
+    iSurfaceId = aSurfaceId;
+    iIsExternalChunk = ETrue;
+
+    err = RegisterSurface(iSurfaceId);
+    if (err != KErrNone)
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssCreateSurface -- failed RegisterSurface %d"), this, err);
+       iSurfaceHandler->DestroySurface(iSurfaceId);
+       iSurfaceId = TSurfaceId::CreateNullId();
+       return err;
+    }
+    
+    err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+    if (err != KErrNone)
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssCreateSurface -- failed to get Surface info %d"), this, err);
+        return err;
+    }
+
+    if(iAttributes().iPixelFormat == EUidPixelFormatYUV_422Interleaved) 
+        {
+            iVideoFrameBufSize          = iInfo().iSize.iWidth * iInfo().iSize.iHeight * 2;
+        }
+        else
+        {//EStUidPixelFormatYUV_420MB
+        // EUidPixelFormatYUV_420Planar            
+            iVideoFrameBufSize          =  iInfo().iSize.iWidth * iInfo().iSize.iHeight * 3/2;
+        }
+    
+     
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcCreateSurface err=%d"), this, err);
+    return err;
+    }
+
+void CNGAPostProcHwDevice::MmvssSetObserver(MMMFVideoSurfaceObserver& aObserver)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSetObserver() ++"), this);
+	iVideoSurfaceObserver = &aObserver;
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSetObserver() --"), this);
+}
+
+void CNGAPostProcHwDevice::MmvssGetSurfaceParametersL(TSurfaceId& aSurfaceId, 
+						TRect& aCropRect, TVideoAspectRatio& aPixelAspectRatio)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssGetSurfaceParametersL() ++"), this);
+
+	iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssGetSurfaceParametersL() \
+		surfaceWidth = %d surfaceHeight = %d SurfaceId = 0x%x --"), 
+		this, iInfo().iSize.iWidth, iInfo().iSize.iHeight, iSurfaceId);
+	aSurfaceId = iSurfaceId;
+		aCropRect = TRect(0, 0, iInfo().iSize.iWidth, iInfo().iSize.iHeight);
+		if((iPicSize.iWidth > 0) && (iPicSize.iHeight > 0))
+		{
+			aCropRect.Intersection( iPicSize);
+		}
+	aPixelAspectRatio = TVideoAspectRatio(iAspectRatioNum,iAspectRatioDenom);
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssGetSurfaceParametersL()  \
+		cropRectWidth = %d cropRectHeight = %d"), this, aCropRect.Width(), aCropRect.Height());
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssGetSurfaceParametersL()  \
+		PAR Num = %d PAR Denom = %d"), this, aPixelAspectRatio.iNumerator, aPixelAspectRatio.iDenominator);
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssGetSurfaceParametersL() --"), this);
+}
+
+void CNGAPostProcHwDevice::MmvssSurfaceRemovedL(const TSurfaceId& aSurfaceId)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL()++"), this);
+	if(!aSurfaceId.IsNull())
+	{
+	    if(iSurfaceId == aSurfaceId)
+        {//closing down top surface....current surface.
+            if(iSessionManager)
+            {
+                iSessionManager->CancelNotifiers();
+            }
+	    }
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL(): UnregisterSurface ID = 0x%x"), this, aSurfaceId );
+		TInt numScreens = iWsSession.NumberOfScreens();
+		for(TInt i=0;i < numScreens;i++)
+		{
+			iWsSession.UnregisterSurface(i, aSurfaceId);
+		}
+		iWsSession.Flush();
+		iSurfaceHandler->DestroySurface(aSurfaceId);
+		if(iSurfaceId == aSurfaceId)
+		{
+			iSurfaceCreatedEventPublished = EFalse;
+			iSurfaceId = TSurfaceId::CreateNullId();
+			 if(!iIsExternalChunk)
+			 {
+				iChunk.Close();
+			 }
+		}
+	}
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL() --"), this);
+}
+
+// === MMmfVideoPropertiesObserver ===
+    
+void CNGAPostProcHwDevice::MmvpoUpdateVideoProperties(const TYuvFormat& aYuvFormat, const TSize& aPictureSize)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvpoUpdateVideoProperties ++"), this);
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvpoUpdateVideoProperties PAR \
+		iAspectRatioNum = %d, iAspectRatioDenom = %d"), this,
+					 aYuvFormat.iAspectRatioNum,aYuvFormat.iAspectRatioDenom);
+	iPicSize = aPictureSize;
+	iAspectRatioNum = aYuvFormat.iAspectRatioNum;
+	iAspectRatioDenom = aYuvFormat.iAspectRatioDenom;
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvpoUpdateVideoProperties Picture Size \
+		iWidth = %d, iHeight = %d, iSurfaceCreatedEventPublished = %d"), 
+		this, iPicSize.iWidth,iPicSize.iHeight, iSurfaceCreatedEventPublished?1:0);
+			 
+	if(iVPObserver)
+	{
+		iVPObserver->MmvpoUpdateVideoProperties(aYuvFormat, aPictureSize);
+	} 
+	if(iVideoSurfaceObserver && iSurfaceCreatedEventPublished)
+	{
+    	iVideoSurfaceObserver->MmvsoSurfaceParametersChanged(); 
+    }
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvpoUpdateVideoProperties --"), this);
+}
+
+// === MMmfVideoResourceObserver ===
+
+void CNGAPostProcHwDevice::MmvroResourcesLost(TUid )
+{
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost ++"), this);
+    if(!iResourceLost)
+    {
+		iResourceLost = ETrue;
+		iRedrawDone = EFalse;
+		Pause();
+		ReleaseInputQ();
+		iSessionManager->CancelNotifiers();
+		ReleaseProcessQ();
+		if(iVideoSurfaceObserver && iSurfaceCreatedEventPublished)
+		{
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost - Telling client to remove surface"), this);
+			iVideoSurfaceObserver->MmvsoRemoveSurface();
+			iSurfaceCreatedEventPublished = EFalse;
+		}
+	}
+	else if(iResourceLost && iRedrawDone)
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost ResourceLost happening \
+					while Postprocessor is already in ResourceLoss state"), 
+	   				this);
+		iProxy->MdvppFatalError(this, KErrHardwareNotAvailable);	   				
+	    return;		
+	}
+	else
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost Ignoring the \
+					duplicate ResourceLoss call"), 
+	   				this);
+	}
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost --"), this);
+}
+
+// === MMmfVideoPropertiesNotifier ===
+    
+void CNGAPostProcHwDevice::MmvpnSetObserver(MMmfVideoPropertiesObserver* aObserver)
+{
+	PP_DEBUG(_L("ppHwDev[%x]::MmvpnSetObserver ++"), this);
+	iVPObserver = aObserver;
+	PP_DEBUG(_L("ppHwDev[%x]::MmvpnSetObserver --"), this);
+}
+
+void CNGAPostProcHwDevice::MmvroResourcesRestored(TUid )
+{
+   	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvroResourcesRestored ++"), this);
+	iFirstPictureUpdated = EFalse;
+	iResourceLost = EFalse;
+   	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvroResourcesRestored state=%d --"), 
+   			this, iPPState);
+}
+
+void CNGAPostProcHwDevice::MmvshcSetSurfaceHandle(const TSurfaceId &aSurfaceID)
+{
+    
+    SetupExternalSurface(aSurfaceID);
+    
+}
+
+void CNGAPostProcHwDevice::MmvshcRedrawBufferToSurface(TPtrC8& aRedrawBuffer)
+{
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface ++"), this);
+	
+    TUint8*         lPtr;
+    TInt 			offset;
+
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface -- Creating %d x %d surface"), this, iPicSize.iWidth, iPicSize.iHeight);
+
+   	TInt err = KErrNone;
+	SetSurfaceAttributes(iPicSize, 1); 
+	
+  	err = iSurfaceHandler->CreateSurface(iAttributes, iSurfaceId);
+  	if (err != KErrNone)
+	{
+	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcRedrawBufferToSurface -- failed to create Surface %d"), 
+	   				this, err);
+		iProxy->MdvppFatalError(this, err);	   				
+	    return;
+	}
+
+	err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+	if (err != KErrNone)
+	{
+	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcRedrawBufferToSurface -- failed to get Surface info %d"), 
+	   				this, err);
+	   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   	iSurfaceId = TSurfaceId::CreateNullId();
+		iProxy->MdvppFatalError(this, err);	   				
+	    return;
+	}
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcRedrawBufferToSurface() \
+		surfaceWidth = %d surfaceHeight = %d surfaceStride = %d"), this, iInfo().iSize.iWidth, iInfo().iSize.iHeight, iInfo().iStride);
+
+	TInt redrawBufferSize = aRedrawBuffer.Size();
+	TInt surfaceSize = iInfo().iStride * iInfo().iSize.iHeight;
+
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface RedrawBuffer size= %d Surface size = %d"), this, redrawBufferSize, surfaceSize);
+
+	// Check whether redraw buffer will fit onto the surface.
+	// If this check fails then we won't raise a fatal error - We just won't create the redraw surface
+	if (redrawBufferSize > surfaceSize)
+	{
+    	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface Redraw buffer size larger than surface size"), this);
+    	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   	iSurfaceId = TSurfaceId::CreateNullId();
+    	return;
+	}
+
+	err = iSurfaceHandler->MapSurface(iSurfaceId, iChunk);
+	if (err != KErrNone)
+	{
+	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvshcRedrawBufferToSurface -- failed to map Surface %d"), 
+	   				this, err);
+	   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   	iSurfaceId = TSurfaceId::CreateNullId();
+		iProxy->MdvppFatalError(this, err);	   				
+	    return;
+	}
+	iIsExternalChunk = EFalse;
+    if((err = iSurfaceHandler->GetBufferOffset(iSurfaceId, 0, offset)) != KErrNone)
+    {
+    	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface offset query failed %d"), this, err);
+    	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   	iSurfaceId = TSurfaceId::CreateNullId();
+		iChunk.Close();
+    	iProxy->MdvppFatalError(this, err);
+    	return;
+    }
+
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface offset = %d"), this, offset);
+
+	lPtr = reinterpret_cast<TUint8*>(iChunk.Base() + offset);
+	memcpy((TAny *)lPtr, (TAny *)aRedrawBuffer.Ptr(), redrawBufferSize);
+
+	iRedrawSurfaceInUse = ETrue;
+
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface(): New surface = 0x%x"), this, iSurfaceId);
+
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvshcRedrawBufferToSurface error = %d --"), this, err);
+}
+
+TInt CNGAPostProcHwDevice::SetupExternalSurface(const TSurfaceId &aSurfaceID)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface(): aSurfaceID = 0x%x"), this, aSurfaceID );
+
+    TInt err = KErrNone;
+    
+    if(!iSurfaceId.IsNull())
+    {
+		if (iVideoSurfaceObserver && iSurfaceCreatedEventPublished)
+		{
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface - Telling client to remove old surface"), this);
+			iVideoSurfaceObserver->MmvsoRemoveSurface();
+			iSurfaceCreatedEventPublished = EFalse;
+		}
+		else
+		{
+			// We never told the client about the surface, so we must destroy it ourselves
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface - Destroying old surface"), this);
+			TInt numScreens = iWsSession.NumberOfScreens();
+    		for(TInt i=0;i < numScreens;i++)
+    		{
+    			iWsSession.UnregisterSurface(i, iSurfaceId);
+    		}
+   			iWsSession.Flush();
+			iSurfaceHandler->DestroySurface(iSurfaceId);
+		}
+
+		iChunk.Close();
+	}
+    
+    iSurfaceId            = aSurfaceID;
+    iUsingExternalSurface = ETrue;
+    iRedrawSurfaceInUse = EFalse;
+
+    // Create the surface handler if it doesn't exist.
+    if (!iSurfaceHandler)
+    {
+        TRAP(err, iSurfaceHandler = CNGAPostProcSurfaceHandler::NewL());
+        if (err != KErrNone)
+        {
+           PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to create SurfaceHandler."), this);
+            return err;
+        }
+    }
+    
+    err = iSurfaceHandler->OpenSurface(iSurfaceId);
+    if (err != KErrNone)
+	{
+	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed OpenSurface %d"), 
+	   				this, err);
+	    return err;
+	}
+    err = AddHints();
+    if (err != KErrNone)
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to AddHints %d"), 
+                    this, err);
+        return err;
+    }
+	err = RegisterSurface(iSurfaceId);
+	if (err != KErrNone)
+	{
+	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed RegisterSurface %d"), 
+	   				this, err);
+	   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   	iSurfaceId = TSurfaceId::CreateNullId();
+	    return err;
+	}
+
+    err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+    if (err != KErrNone)
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to get Surface info %d"), 
+                     this, err);
+        return err;
+    }
+ 
+  PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface err=%d"), this, err);
+   return err;
+}
+
+//=== Internal ===
+TVideoPicture* CNGAPostProcHwDevice::CreateBuffersL(TInt aBufId)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateBuffersL ++"), this);
+	
+	TVideoPicture*          lVideoPicture = NULL;
+    TUint8*                 lPtr;
+    TPtr8*                  lTemp;
+    TInt 					offset;
+    
+	lVideoPicture = new (ELeave) TVideoPicture;
+    CleanupStack::PushL(lVideoPicture);
+    if(TInt err = iSurfaceHandler->GetBufferOffset(iSurfaceId, aBufId, offset) != KErrNone)
+    {
+    	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateBuffersL offset query failed %d"), this, err);
+    }
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateBuffersL offset = %d id =%d --"), this, offset, aBufId);
+    
+	lPtr = reinterpret_cast<TUint8*>(iChunk.Base() + offset);
+
+    lTemp = new (ELeave) TPtr8(lPtr, 0, (iVideoFrameBufSize ));
+    CleanupStack::PushL(lTemp);
+
+    lVideoPicture->iData.iRawData   = lTemp;
+    lVideoPicture->iHeader = NULL ;
+    lVideoPicture->iLayerBitRates = NULL ;
+    
+    CleanupStack::Pop(2);
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateVBMBuffersL --"), this);
+    return lVideoPicture;
+}
+
+void CNGAPostProcHwDevice::CreateVBMBuffersL()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateVBMBuffersL ++"), this);
+    
+    TInt err = KErrNone;
+    TVideoPicture* pic = NULL;
+    iVBMBufferReferenceQ.Reset();
+    iVBMBufferQ.Reset();
+    iColorConversionQ.Reset();
+
+    for(TInt i = 0; i < iVBMBufferOptions.iNumInputBuffers; i++)
+    {
+        TRAP(err, pic = CreateBuffersL(i));
+	    	if (err != KErrNone)
+	    	{
+	    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create VBM buffer %d"), this, err);
+	    	    User::Leave(err);
+	    	}
+
+        // This will hold the references which will be used in destructor
+        User::LeaveIfError(iVBMBufferReferenceQ.Append(pic));
+        User::LeaveIfError(iVBMBufferQ.Append(pic));
+    }
+    if(iIsColorConversionNeeded)
+    {
+		    for(TInt i = iVBMBufferOptions.iNumInputBuffers ; 
+		    				 i < (iVBMBufferOptions.iNumInputBuffers + KColorConversionBuffers ); i++)
+		    {
+		        TRAP(err, pic = CreateBuffersL(i));
+			    	if (err != KErrNone)
+			    	{
+			    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create VBM buffer %d"), this, err);
+			    	    User::Leave(err);
+			    	}
+		
+		        // This will hold the references which will be used in destructor
+		        User::LeaveIfError(iVBMBufferReferenceQ.Append(pic));
+		        User::LeaveIfError(iColorConversionQ.Append(pic));
+		    }
+		}
+	    
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::CreateVBMBuffersL --"), this);
+}
+
+void CNGAPostProcHwDevice::ReturnPicToDecoder(TVideoPicture* aPic)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReturnPicToDecoder ++"), this);
+	if (aPic == NULL)
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputPicture FAILED: Invalid pic ptr."), this);
+		return;
+	}
+	
+   	if (iInputDecoderDevice)
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputPicture .. before return picture. 2"), this);
+        iInputDecoderDevice->ReturnPicture(aPic);
+    }
+	
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReturnPicToDecoder --"), this);
+}
+
+TInt CNGAPostProcHwDevice::AttemptToPost()
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AttemptToPost ++ Q:%d"), this, iInputQ.Count());
+   if (iPPState == EPaused)
+   {
+        return KErrNone;
+   }
+
+    TInt err = KErrNotReady;
+    TInt count = iInputQ.Count();
+    TBool bDone = EFalse;
+    TVideoPicture* pic = PeekQ();   		
+  	while(pic && !bDone)
+  	{
+	    if(!IsGceReady())
+		{  
+			PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AttemptToPost GCE not ready"), this );
+			return err; //no need to catch this error
+		}
+		TInt64 delta = 0;
+		TTimeToPost	timeToPost = (TTimeToPost)IsTimeToPost(pic, delta);
+		switch(timeToPost)
+		{
+			case EDelayIt:
+			{
+				iPostingTimer->Cancel();
+				SetTimer(delta);
+				bDone = ETrue;
+			}
+			break;
+			case EPostIt:
+			{
+				RemoveFromQ(); // remove the pic that was returned by PeekQ				
+				if(iIsColorConversionNeeded)
+				{
+				    TVideoPicture* ccPic;
+    				ccPic = DoColorConvert(pic); // output will be in ccPic
+    				pic = ccPic;
+			    }
+				
+                #ifdef _DUMP_YUV_FRAMES
+                    captureYuv(pic);
+                #endif
+				TInt err = iSessionManager->PostPicture(iSurfaceId, GetID(pic), ETrue); 
+				if(err == KErrNone)
+				{
+				    iProcessQ.Append(pic);
+					iCurrentPlaybackPosition = pic->iTimestamp;
+					if(!iFirstPictureUpdated)
+					{
+						iFirstPictureUpdated = ETrue;
+						if(!iSurfaceCreatedEventPublished)
+                    	{
+                        	PublishSurfaceCreated();
+                    	}
+					}
+				}
+				else
+				{
+					ReleasePicture(pic);
+				}
+										 					
+				
+			}	// end of postit
+			break;
+			case ESkipIt: 
+			{
+				RemoveFromQ();
+				ReleasePicture(pic);
+				PicturesSkipped();				
+			}
+			break;
+		} // end of switch
+		
+		// get the next picture
+		pic = PeekQ();	
+    } // end of while
+    
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AttemptToPost --"), this);
+ 	return err;
+}
+
+TInt CNGAPostProcHwDevice::IsTimeToPost(TVideoPicture* frame, TInt64& delta)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost ++"), this);
+
+    if (!frame)
+    {
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost FAILED: Invalid frame ptr."), this);
+		return KErrGeneral;
+	}
+
+    TInt resp = EPostIt;
+    // Frame presentation time
+    TInt64 uPresTime = frame->iTimestamp.Int64();
+      
+    // Check if this is an out of order frame in case of forward playback
+    if((iCurrentPlaybackPosition.Int64() > uPresTime) && (iPlayRate > 0))    
+    {      
+         PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost : Out of order frame (forward playback) Tfm=%d"), this,(TInt)uPresTime);
+         resp = ESkipIt;  //drop      
+    }      // Check if this is an out of order frame in case of backward playback
+    else if((iCurrentPlaybackPosition.Int64() < uPresTime) && (iPlayRate < 0))    
+    {      
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost : Out of order frame (backward playback) Tfm=%d"), this,(TInt)uPresTime);
+        resp = ESkipIt;  //drop      
+    }
+    else if (iClockSource)
+    {
+        // The time to sync with.
+        TInt64 uSyncTime = iClockSource->Time().Int64();
+        
+        delta = uPresTime - uSyncTime;
+        if (( delta > KRenderAhead ) &&  (iPlayRate > 0))	// Delay condition not checked for 
+        {													// backward playback
+        	resp = EDelayIt;  //wait
+        }
+        else if ( (delta < (-KMaxRenderDelay) && (iPlayRate > 0))
+          		||  ((delta > KMaxRenderDelay) && (iPlayRate < 0)))
+        {
+            resp = ESkipIt;  //drop
+        }
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost .. Tfm=%d, Tcs=%d, delta=%d"), this, (TInt)uPresTime, (TInt)uSyncTime, (TInt)delta);
+    }       
+   
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:IsTimeToPost -- %d BufID = %d"), this, resp, GetID(frame));
+    return resp;
+}
+
+void CNGAPostProcHwDevice::ReleaseInputQ()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputQ ++ Q = %d"), this, iInputQ.Count());
+    while (iInputQ.Count()>0)
+    {
+    	ReleasePicture(iInputQ[0]);
+        iInputQ.Remove(0);
+    }
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputQ --"), this);
+}
+
+void CNGAPostProcHwDevice::ReleaseProcessQ()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseProcessQ ++ Q = %d"), this, iProcessQ.Count() );
+	TVideoPicture* pic = NULL;
+	
+    while (iProcessQ.Count()>0)
+    {
+		pic = iProcessQ[0];
+		iProcessQ.Remove(0);
+		ReturnPicToDecoder(pic);
+    }
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseProcessQ --"), this);
+}
+
+void CNGAPostProcHwDevice::ReleasePicture(TVideoPicture *pic)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleasePicture ++"), this);
+	if (pic == NULL)
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputPicture FAILED: Invalid pic ptr."), this);
+		return;
+	}
+	
+   	if (iInputDecoderDevice)
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleaseInputPicture .. before return picture. 2"), this);
+        iInputDecoderDevice->ReturnPicture(pic);
+    }
+	if (iVBMEnabled)
+    {
+        iVBMBufferQ.Append(pic);
+
+        if ( !iIsInputEnded && iPPState != EStopped )
+        {
+            iVBMObserver->MmvbmoNewBuffers();
+        }
+	}
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ReleasePicture --"), this);
+}
+
+void CNGAPostProcHwDevice::PublishSurfaceCreated()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PublishSurfaceCreated ++"), this);   
+	if(iVideoSurfaceObserver)
+	{
+		iVideoSurfaceObserver->MmvsoSurfaceCreated();
+		iSurfaceCreatedEventPublished = ETrue;
+	}
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PublishSurfaceCreated --"), this);
+}
+
+TInt CNGAPostProcHwDevice::SetupSurface()
+{
+	TInt err = KErrNone;
+	if(iVBMEnabled && iVBMObserver)
+    {
+    	SetSurfaceAttributes(iVBMBufferOptions.iBufferSize, iVBMBufferOptions.iNumInputBuffers);
+    	
+	  	err = iSurfaceHandler->CreateSurface(iAttributes, iSurfaceId);
+	  	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create Surface %d"), this, err);
+    	    return err;
+    	}
+    	err = iSurfaceHandler->MapSurface(iSurfaceId, iChunk);
+    	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to map Surface %d"), this, err);
+    	  	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   		iSurfaceId = TSurfaceId::CreateNullId();
+    	    return err;
+    	}
+    	err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+    	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to get Surface info %d"), this, err);
+    	   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   		iSurfaceId = TSurfaceId::CreateNullId();
+    	    return err;
+    	}
+    	TRAP(err, CreateVBMBuffersL());
+    	if (err != KErrNone)
+    	{
+    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to create VBM buffer %d"), this, err);
+    	   	iSurfaceHandler->DestroySurface(iSurfaceId);
+	   		iSurfaceId = TSurfaceId::CreateNullId();
+    	    return err;
+    	}
+        err = AddHints();
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to AddHints %d"), this, err);
+            return err;
+        }
+        err = RegisterSurface(iSurfaceId);
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to RegisterSurface %d"), this, err);
+            iSurfaceHandler->DestroySurface(iSurfaceId);
+            iSurfaceId = TSurfaceId::CreateNullId();
+            return err;
+        }
+        
+    }
+    return err;
+} 
+
+void CNGAPostProcHwDevice::SetSurfaceAttributes(const TSize& aSize, TInt aNumBuf)
+{
+	iAttributes().iSize                   = aSize; // size of the video frame
+    iAttributes().iBuffers            	  = aNumBuf;
+    
+    /* The stride needs to be calculated for the surface manager to know
+    how much memory to allocate */
+    
+    if(iAttributes().iPixelFormat == EUidPixelFormatYUV_420Planar)
+    	{
+    		iAttributes().iStride       = aSize.iWidth * 3/2;
+    		iVideoFrameBufSize			= aSize.iWidth * aSize.iHeight * 3/2;
+    	}
+    	else
+    	{
+    		iAttributes().iStride       = aSize.iWidth * 2;
+    		iVideoFrameBufSize			= aSize.iWidth * aSize.iHeight * 2;
+    	}
+    		
+    if(iIsColorConversionNeeded)
+    {
+    	iAttributes().iBuffers            = aNumBuf + KColorConversionBuffers;
+    }
+    else
+    {
+    	iAttributes().iBuffers            = aNumBuf;	
+    }
+    
+    iAttributes().iOffsetToFirstBuffer    = 0;
+#if defined __WINSCW__ 
+    iAttributes().iAlignment              = 4;
+#else //on hw, its always better to have page aligned chunks
+    iAttributes().iAlignment              = -1;
+#endif
+    iAttributes().iContiguous             = ETrue;
+    iAttributes().iHintCount              = 0;
+    iAttributes().iMappable               = ETrue;
+}
+
+TInt CNGAPostProcHwDevice::GetID(TVideoPicture *aPicture)
+{
+    if (iUsingExternalSurface)
+    {
+	    return GetExternalBufferID(aPicture);
+    }
+    else
+    {
+        TUint8* aPtr = (TUint8*) aPicture->iData.iRawData->Ptr();
+        return( (TInt) ((aPtr - iChunk.Base() - iAttributes().iOffsetToFirstBuffer) / 
+			(iVideoFrameBufSize )));
+    }
+}
+
+TInt CNGAPostProcHwDevice::GetExternalBufferID(TVideoPicture *aPicture)
+{
+    // currently type cast the pointer as buffer ID.
+    // FIXME once the new data structure is available.
+    return( (TInt) aPicture->iData.iRawData->Ptr());
+}
+
+TInt CNGAPostProcHwDevice::RegisterSurface(const TSurfaceId& aSurfaceId)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:RegisterSurface(): RegisterSurface ID = 0x%x"), this, aSurfaceId);
+	TInt err = KErrNone;
+	TInt numScreens = iWsSession.NumberOfScreens();
+	for(TInt i=0; (i < numScreens && err == KErrNone); i++)
+	{
+		err = iWsSession.RegisterSurface(i, aSurfaceId);
+	}	
+	return(err);
+}
+
+TInt CNGAPostProcHwDevice::IsGceReady()
+{
+    if(iProcessQ.Count() >= KMaxBuffersGceCanHold)
+    {
+    		return EFalse;
+    }
+    return ETrue;
+}
+
+void CNGAPostProcHwDevice::SetTimer(TInt64 aDelta)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetTimer .. aDelta=%d"), this, (TInt)aDelta);
+	if(aDelta <= KRenderAhead)
+	{
+		if(aDelta < 0)
+		{
+			iPostingTimer->After(aDelta * -1);
+		}
+		else
+		{
+			iPostingTimer->After((aDelta - KRenderAhead) * -1);
+		}
+	}
+	else
+	{
+		iPostingTimer->After(aDelta - KRenderAhead - KPostingOfset);
+	}
+}
+//
+// Convert YUV420 to YUV422InterLeaved.
+//
+TInt CNGAPostProcHwDevice::ConvertPostProcBuffer(TVideoPicture* pSrc, TVideoPicture* pDest)
+{
+    PP_DEBUG(_L("CMdfPostingSurfaceProxy::ConvertPostProcBuffer ++"));
+    TInt err = KErrNone;
+    if (!pDest && !pSrc)
+	{
+		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ConvertPostProcBuffer FAILED: Invalid pic pSrc %x pDest %x."), this, pSrc, pDest);
+		return KErrArgument;
+	}
+    
+    // --- Prepare wrappers ---
+    tBaseVideoFrame tFrame420, tFrame422;
+    TInt    frameSize = pSrc->iData.iDataSize.iWidth * pSrc->iData.iDataSize.iHeight;
+
+   PP_DEBUG(_L("CMdfPostingSurfaceProxy::ConvertPostProcBuffer .. w=%d, h=%d"), pSrc->iData.iDataSize.iWidth, pSrc->iData.iDataSize.iHeight);
+
+    tFrame420.width = pSrc->iData.iDataSize.iWidth;
+    tFrame420.height= pSrc->iData.iDataSize.iHeight;
+    tFrame420.lum   = (TUint8*)pSrc->iData.iRawData->Ptr();
+    tFrame420.cb    = (TUint8*)tFrame420.lum + frameSize;
+    tFrame420.cr    = (TUint8*)tFrame420.lum + (frameSize*5)/4;
+    
+    tFrame422.width = pSrc->iData.iDataSize.iWidth;
+    tFrame422.height= pSrc->iData.iDataSize.iHeight;
+    tFrame422.lum   = (TUint8*)pDest->iData.iRawData->Ptr();
+    tFrame422.cb    = 0;
+    tFrame422.cr    = 0;
+    
+    // --- Convertion to posting buffer ---
+    TInt stride     = pSrc->iData.iDataSize.iWidth * 2;
+    EBufferLayout422 layout = YUV422INT_BE;
+        
+    err = gColorConvYUVtoYUV422Int(&tFrame420, &tFrame422, layout, stride);
+    if(err != KErrNone)
+    {
+    		PP_DEBUG(_L("CNGAPostProcHwDevice::ConvertPostProcBuffer .. err= %d."), err);
+    }
+	return err;
+}   
+
+void CNGAPostProcHwDevice::AddPictureToVBMQ(TVideoPicture *pic)
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddPictureToVBMQ ++"), this);
+    iVBMBufferQ.Append(pic);
+
+    if ( !iIsInputEnded && iPPState != EStopped )
+    {
+        iVBMObserver->MmvbmoNewBuffers();
+    }
+	
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddPictureToVBMQ --"), this);
+}
+
+void CNGAPostProcHwDevice::AddPictureToColorConversionQ(TVideoPicture *pic)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddPictureToColorConversionQ ++"), this);
+    iColorConversionQ.Append(pic);
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddPictureToColorConversionQ --"), this);
+}
+
+#ifdef _DUMP_YUV_FRAMES
+void CNGAPostProcHwDevice::captureYuv(TVideoPicture* aPicture)
+{
+	char buf[128];              
+	sprintf(buf, "c:\\fb%d.yuv", count++);          
+	FILE *fp = ::fopen(buf, "w");
+	TInt size = aPicture->iData.iRawData->Size();
+	//{FILE* f1 = fopen(MY_LOG_FILE_NAME, "a+"));if(f1){fprintf(f1, "Size  %d \n"), size );fclose(f1); }}
+
+	::fwrite(aPicture->iData.iRawData->Ptr(), 1, size, fp);
+	::fclose(fp);    	
+}
+#endif
+
+void CNGAPostProcHwDevice::ResetCountingBuffer()
+{       
+	memset(iSkippedFramesCountingBuffer,0,sizeof(iSkippedFramesCountingBuffer));
+    iSkippedFramesInLast64Frames = 0;       
+    iCurrentPosInFramesCountingBuffer = 0;       
+} 
+
+void CNGAPostProcHwDevice::PicturesSkipped()
+{       
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PicturesSkipped ++"), this);
+	iPictureCounters.iPicturesSkipped++;
+	if (!iKeyFrameMode && iPlayRate>KDefPlayRate)
+    {       
+    	if (iSkippedFramesCountingBuffer[iCurrentPosInFramesCountingBuffer]==0)        
+        {       
+        	iSkippedFramesCountingBuffer[iCurrentPosInFramesCountingBuffer] = 1;       
+            iSkippedFramesInLast64Frames++;       
+            if (iSkippedFramesInLast64Frames>KMaxAllowedSkipInNFrames && iFPObserver )       
+            {       
+            	iFPObserver->MmvproKeyFrameModeRequest();       
+                iKeyFrameMode=ETrue;       
+                ResetCountingBuffer();       
+            }       
+        }       
+        iCurrentPosInFramesCountingBuffer = ++iCurrentPosInFramesCountingBuffer%64;       
+    }
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:PicturesSkipped --"), this);   
+}
+
+TVideoPicture* CNGAPostProcHwDevice::DoColorConvert(TVideoPicture* aPicture)
+{
+    TVideoPicture *pOutPicture  = aPicture;
+    					    		
+	if(iColorConversionQ.Count())
+    {
+	    pOutPicture    = iColorConversionQ[0];
+	    iColorConversionQ.Remove(0);
+	    ConvertPostProcBuffer(aPicture, pOutPicture);
+	   	pOutPicture->iTimestamp = aPicture->iTimestamp;
+	    ReleasePicture(aPicture);    	    
+    }				    
+    else
+    {
+       PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:WritePictureL() FAILED: color conversion"), this);
+    }
+
+	return pOutPicture;
+}
+
+TInt CNGAPostProcHwDevice::AddToQ(TVideoPicture* aPicture)
+{
+	TVideoPicture* pic = aPicture;
+	TInt pos = -1;
+	if(iInputQ.Count() == 0)
+	{
+		iInputQ.Append(pic);
+	}
+	else
+	{
+		pos = iInputQ.Count()-1;
+		for(; pos >= 0; pos--)
+		{
+			if(pic->iTimestamp.Int64() > iInputQ[pos]->iTimestamp.Int64())
+			{
+				break;
+			}
+		} 
+		if(iInputQ.Count() == pos+1)
+		{
+			iInputQ.Append(pic);
+		}
+		else
+		{
+			iInputQ.Insert(pic, pos+1);
+		}
+	}
+	return pos+1;
+}
+
+void CNGAPostProcHwDevice::RemoveFromQ()
+{
+	if(iInputQ.Count())
+	{
+		if(iPlayRate > 0)
+		{
+			iInputQ.Remove(0);
+		}
+		else
+		{
+			iInputQ.Remove(iInputQ.Count()-1);
+		}
+	}
+}
+
+TVideoPicture* CNGAPostProcHwDevice::PeekQ()
+{	
+	TVideoPicture *pic = NULL;
+	if(iInputQ.Count())
+	{
+		if(iPlayRate > 0)
+		{			
+			pic = iInputQ[0];
+		}
+		else
+		{			
+			pic = iInputQ[iInputQ.Count()-1];
+		}	
+	}
+	return pic;
+}
+
+TInt CNGAPostProcHwDevice::AddHints()
+{
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddHints iSurfaceMask 0x%08x ++"), this, iSurfaceMask);
+   TInt err = KErrNone;
+   iHint.Set(iSurfaceKey,iSurfaceMask,ETrue);
+   err = iSurfaceHandler->AddSurfaceHint(iSurfaceId,iHint);
+   if(err == KErrAlreadyExists)
+   {
+		err = KErrNone;
+		err = iSurfaceHandler->SetSurfaceHint(iSurfaceId,iHint);
+   }
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddHints. err = %d --"), this,err);
+   iHint.iKey.iUid = surfaceHints::KSurfaceContent;
+   iHint.iValue = surfaceHints::EVideoPlayback;
+   iHint.iMutable = ETrue;
+   err = iSurfaceHandler->AddSurfaceHint(iSurfaceId,iHint);
+   if(err == KErrAlreadyExists)
+   {
+		err = KErrNone;
+		err = iSurfaceHandler->SetSurfaceHint(iSurfaceId,iHint);
+   }
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddHints. err = %d --"), this,err);
+   return err;
+}
+
+TInt CNGAPostProcHwDevice::ColorConvert(tBaseVideoFrame* aInputFrame, TUint8* aDestPtr, tWndParam* aInputCropWindow, tWndParam* aOutputCropWindow)
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ColorConvert ++"), this);
+	__ASSERT_ALWAYS(aDestPtr, User::Invariant());
+	TInt				lError = E_SUCCESS;
+	TInt				err = KErrNone;
+	
+	err = SetSourceFormat();
+	if(err == KErrNone)
+	{
+    	err = SetSourceRange();
+    	if(err == KErrNone)
+    	{
+						
+			lError = Emz_VDec_gColorConv_YUVtoRGB(aInputFrame,aDestPtr, 
+						aInputCropWindow, aOutputCropWindow, iSourceFormat,
+						EBitmapColor16MU, iSourceRange);
+
+			if(lError)
+			{
+				if(lError == E_OUT_OF_MEMORY)
+					{
+					err = KErrNoMemory;
+					}
+				else if(lError == E_FAILURE)
+					{
+					err = KErrNotSupported;
+					}
+				else
+					{
+					err = KErrGeneral;
+					}
+			}
+		}
+	}
+	
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ColorConvert --"), this);
+	return err;
+}
+
+TInt CNGAPostProcHwDevice::SetSourceFormat()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetSourceFormatL ++"), this);
+	TInt err = KErrNone;
+	switch (iVideoFormat.iYuvFormat.iPattern)
+	{
+	    case EYuv420Chroma1:
+    		iSourceFormat = EYuv420Chroma1_Planar;
+    		break;
+        case EYuv420Chroma2:
+    		iSourceFormat = EYuv420Chroma2_Planar;
+    		break;
+        case EYuv420Chroma3:
+    		iSourceFormat = EYuv420Chroma3_Planar;
+    		break;
+	    case EYuv422Chroma1:
+			if( iVideoFormat.iYuvFormat.iDataLayout == EYuvDataInterleavedLE)
+    			iSourceFormat = EYuv422Chroma1_LE;
+	    	else if( iVideoFormat.iYuvFormat.iDataLayout == EYuvDataInterleavedBE )
+				iSourceFormat = EYuv422Chroma1_BE;
+			else
+			    err = KErrArgument;
+			break;
+    	case EYuv422Chroma2:
+    		if( iVideoFormat.iYuvFormat.iDataLayout == EYuvDataInterleavedLE)
+	    		iSourceFormat = EYuv422Chroma2_LE;
+    		else if( iVideoFormat.iYuvFormat.iDataLayout == EYuvDataInterleavedBE )
+    			iSourceFormat = EYuv422Chroma2_BE;
+			else
+			    err = KErrArgument;
+			break;
+      default:
+    		err = KErrNotSupported;
+	}
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetSourceFormatL --"), this);
+	return err;
+}
+
+
+TInt CNGAPostProcHwDevice::SetSourceRange()
+{
+	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetSourceRangeL ++"), this);
+	TInt err = KErrNone;
+	switch (iVideoFormat.iYuvFormat.iCoefficients)
+	{
+	    case EYuvBt601Range0:
+			iSourceRange = EITU601_5_REDUCEDRANGE;
+            break;
+        case EYuvBt601Range1:
+			iSourceRange = EITU601_5_FULLRANGE;
+			break;
+        case EYuvBt709Range0:
+			iSourceRange = EB709_REDUCEDRANGE;
+			break;
+        case EYuvBt709Range1:
+			iSourceRange = EB709_FULLRANGE;
+            break;
+	    default:
+		    err = KErrNotSupported;
+    }
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetSourceRangeL --"), this);
+    return err;
+}
+
+CNGAPostProcTimer::CNGAPostProcTimer( CNGAPostProcHwDevice& aParent )
+:CTimer(EPriorityHigh),iParent(aParent)
+{
+	CActiveScheduler::Add(this);
+}
+
+CNGAPostProcTimer::~CNGAPostProcTimer()
+{
+	PP_DEBUG(_L("CNGAPostProcTimer[%x]:~CNGAPostProcTimer ++"), this);
+	Cancel();
+	PP_DEBUG(_L("CNGAPostProcTimer[%x]:~CNGAPostProcTimer --"), this);
+}
+
+CNGAPostProcTimer* CNGAPostProcTimer::NewL( CNGAPostProcHwDevice& aParent )
+{
+	CNGAPostProcTimer* self = new (ELeave)CNGAPostProcTimer(aParent);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+}
+
+void CNGAPostProcTimer::ConstructL()
+{
+	CTimer::ConstructL();
+}
+
+void CNGAPostProcTimer::RunL()
+{
+	PP_DEBUG(_L("CNGAPostProcTimer[%x]:RunL ++"), this);
+	if (iStatus ==KErrCancel)
+	{
+		PP_DEBUG(_L("CNGAPostProcNotifier[%x]:CNGAPostProcNotifier:RunL State canceled"), this);
+		return;
+	}
+	iParent.AttemptToPost();
+	PP_DEBUG(_L("CNGAPostProcTimer[%x]:RunL --"), this);
+}
+
+void CNGAPostProcHwDevice::MmpirPostInitializeRequest(MMmfPostInitializeResponse& aResponse)
+	{
+	iPostInitializeResponse = &aResponse;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcNotifier.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2006 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:  
+*
+*/
+ 
+
+#include "NGAPostProcNotifier.h"
+#include "NGAPostProcSessionManager.h"
+#include "MdfRDebug.h"
+
+CNGAPostProcNotifier::CNGAPostProcNotifier( CNGAPostProcSessionManager& aParent )
+:CActive(CActive::EPriorityStandard),iParent(aParent)
+{
+	CActiveScheduler::Add(this);
+}
+
+CNGAPostProcNotifier::~CNGAPostProcNotifier()
+{
+	Cancel();
+}
+
+CNGAPostProcNotifier* CNGAPostProcNotifier::NewL( CNGAPostProcSessionManager& aParent )
+{
+	CNGAPostProcNotifier* self = new (ELeave)CNGAPostProcNotifier(aParent);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+}
+
+void CNGAPostProcNotifier::ConstructL()
+{
+	// No Impl
+}
+
+void CNGAPostProcNotifier::SetBufferId(TInt aBufId)
+{
+	iBufferId = aBufId;
+}
+
+void CNGAPostProcNotifier::Activate()
+{
+	PP_DEBUG(_L("CNGAPostProcNotifier:Activate ++"));
+	if(!IsActive())
+	{
+		PP_DEBUG(_L("CNGAPostProcNotifier:Activate SetActive"));
+		SetActive();
+	}
+	PP_DEBUG(_L("CNGAPostProcNotifier:Activate --"));
+}
+
+void CNGAPostProcNotifier::RunL()
+{
+	PP_DEBUG(_L("CNGAPostProcNotifier:RunL ++"));
+	//KErrCancel should never get invoked Since cancellation handled syncronously under AO's
+	//DoCancel.
+	iParent.HandleBufferRelease(iBufferId, iStatus.Int());
+
+	PP_DEBUG(_L("CNGAPostProcNotifier:RunL --"));
+}
+
+void CNGAPostProcNotifier::DoCancel()
+{
+    iParent.CancelUpdate();
+}
+
+TInt CNGAPostProcNotifier::RunError( TInt /*aError*/ )
+{
+	PP_DEBUG(_L("CNGAPostProcNotifier[%x]:CNGAPostProcNotifier::RunError "), this);
+	return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcSessionManager.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+
+#include <e32base.h>
+#include <graphics/surfaceupdateclient.h> //RSurfaceUpdateSession
+#include <graphics/surfacemanager.h> //RSurfaceManager
+#include <graphics/suerror.h> //KAllScreens
+ 
+#include "NGAPostProcSessionManager.h" 
+#include "NGAPostProcSessionManagerObserver.h"
+#include "MdfRDebug.h"
+#include "NGAPostProcNotifier.h"
+
+// --- Constants ---
+const TInt KMessageSlots      = 4; 
+
+//**************************************************
+
+CNGAPostProcSessionManager* CNGAPostProcSessionManager::NewL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager:NewL() ++"));
+
+    CNGAPostProcSessionManager* self = new (ELeave) CNGAPostProcSessionManager; 
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop();
+
+   PP_DEBUG(_L("CNGAPostProcSessionManager:NewL() --"));
+    return self; 
+}
+
+CNGAPostProcSessionManager::CNGAPostProcSessionManager() 
+:iSurfaceUpdateSession(NULL),
+ iObserver(NULL)
+ 
+{
+}
+
+void CNGAPostProcSessionManager::ConstructL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:ConstructL() ++"), this);
+    
+    iSurfaceUpdateSession = new (ELeave) RSurfaceUpdateSession();
+    User::LeaveIfError(iSurfaceUpdateSession->Connect(KMessageSlots));
+    
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:ConstructL() --"), this);
+}
+
+void CNGAPostProcSessionManager::CreateNotifierL(TInt aNumSurfaceBuffers)
+    {
+    PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CreateNotifierL() ++"), this);
+    
+    CNGAPostProcNotifier* notifier;
+    for(TInt index = 0; index < aNumSurfaceBuffers; ++index)
+        {
+        notifier = CNGAPostProcNotifier::NewL(*this);
+        CleanupStack::PushL(notifier);
+        
+        iAOList.AppendL(notifier); 
+        
+        CleanupStack::Pop();
+        }   
+    PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CreateNotifierL() --"), this);
+    }
+
+CNGAPostProcSessionManager::~CNGAPostProcSessionManager()
+{
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:~() ++"), this);
+   //Its safer to destry notifiers before surfaceupdatesession object since notifiers
+   //guarantee synchronous cancellation.
+   iAOList.ResetAndDestroy();
+   
+    if(iSurfaceUpdateSession)
+    {
+    	CancelUpdate();
+    	iSurfaceUpdateSession->Close();
+    	delete iSurfaceUpdateSession;
+    	iSurfaceUpdateSession = NULL;
+	}
+    
+    
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:~() --"), this);
+}
+
+TInt CNGAPostProcSessionManager::PostPicture(const TSurfaceId& aSurfaceId,
+								TInt aBufId, TBool aNotifyRequired) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:PostPicture() ++"), this);
+   TInt err = KErrNone;
+	if(aNotifyRequired)
+	{
+	    CNGAPostProcNotifier* notifier = NULL;
+		for(TInt j=0; j < iAOList.Count(); j++)
+		{
+            //notifier = iAOList[j];
+            if(!iAOList[j]->IsActive())
+            {
+                notifier = iAOList[j];
+                iAOList.Remove(j);
+                //iAOList.Compress(); //why this is required? may create fragmentation.
+                break;
+            }
+		}
+		if(!notifier)
+		{
+			
+			return KErrInUse;
+	        
+		}
+		
+		notifier->SetBufferId(aBufId);
+		notifier->Activate();
+		iSurfaceUpdateSession->NotifyWhenAvailable(notifier->iStatus);
+		iAOList.Append(notifier);
+		
+		
+	}
+	err = iSurfaceUpdateSession->SubmitUpdate(KAllScreens, aSurfaceId, aBufId);
+
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:PostPicture() -- err = %d"), this, err);
+   return err;
+}
+
+void CNGAPostProcSessionManager::CancelUpdate() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CancelUpdate() ++"), this);
+	iSurfaceUpdateSession->CancelAllUpdateNotifications();
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CancelUpdate() --"), this);
+}
+
+void CNGAPostProcSessionManager::CancelNotifiers() 
+{ 
+    
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CancelNotifiers() ++"), this);
+   TInt notifierCount = iAOList.Count();
+   for (TInt i = notifierCount - 1; i >= 0; --i) //reverse loop since the active notifier is appended to the list
+   {
+       if (iAOList[i]->IsActive())
+       {
+           iAOList[i]->Cancel();
+       }
+       else
+       {
+           break;
+       }
+   }
+   
+
+   
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:CancelNotifiers() --"), this);
+
+	
+	
+}
+
+void CNGAPostProcSessionManager::HandleBufferRelease(TInt aBufId, TInt aStatus) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:HandleBufferRelease() ++"), this);
+    if(iObserver)
+    {
+		iObserver->BufferAvailable(aBufId, aStatus);
+	}
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:HandleBufferRelease() --"), this);
+}
+
+void CNGAPostProcSessionManager::SetObserver(MNGAPostProcSessionManagerObserver& aObserver) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:SetClockSource() ++"), this);
+	iObserver = &aObserver;
+   PP_DEBUG(_L("CNGAPostProcSessionManager[%x]:SetClockSource() --"), this);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/NGAPostProcSurfaceHandler.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+ 
+#include <e32base.h>
+#include <graphics/surface.h> //TSurfaceId
+#include <graphics/surfacemanager.h> //RSurfaceManager
+#include "MdfRDebug.h"
+
+#include "NGAPostProcSurfaceHandler.h"
+
+//**************************************************
+
+CNGAPostProcSurfaceHandler* CNGAPostProcSurfaceHandler::NewL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler:NewL() ++"));
+
+    CNGAPostProcSurfaceHandler* self = new (ELeave) CNGAPostProcSurfaceHandler; 
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop();
+
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler:NewL() --"));
+    return self; 
+}
+
+void CNGAPostProcSurfaceHandler::ConstructL() 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:ConstructL() ++"), this);
+    iSurfaceManager = new (ELeave) RSurfaceManager();
+    User::LeaveIfError(iSurfaceManager->Open());
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:ConstructL() --"), this);
+}
+
+CNGAPostProcSurfaceHandler::CNGAPostProcSurfaceHandler() 
+:iSurfaceManager(NULL),
+ iSurfaceAttributes(iSurfaceAttributesBuf())
+{
+}
+
+CNGAPostProcSurfaceHandler::~CNGAPostProcSurfaceHandler()
+{
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:~() ++"), this);
+   if (iSurfaceManager)
+   {
+    iSurfaceManager->Close();
+    delete iSurfaceManager;
+    iSurfaceManager = NULL;
+   }
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:~() --"), this);
+}
+
+TInt CNGAPostProcSurfaceHandler::CreateSurface(
+							const RSurfaceManager::TSurfaceCreationAttributes & aAttributes, 
+							TSurfaceId& aSurfaceId, const RChunk& aChunk) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:CreateSurface() ++"), this);
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:CreateSurface() --"), this);
+   
+
+   iSurfaceAttributes = aAttributes;
+   return(iSurfaceManager->CreateSurface(iSurfaceAttributesBuf, aSurfaceId, aChunk));
+}
+TInt CNGAPostProcSurfaceHandler::CreateSurface(
+							const RSurfaceManager::TSurfaceCreationAttributesBuf & aAttributes, 
+							TSurfaceId& aSurfaceId) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:CreateSurface() ++"), this);
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:CreateSurface() --"), this);
+    return(iSurfaceManager->CreateSurface(aAttributes, aSurfaceId));
+}
+
+
+TInt CNGAPostProcSurfaceHandler::OpenSurface(const TSurfaceId& aSurfaceId) 
+{ 
+ PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:OpenSurface() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:OpenSurface() --"), this);
+	return(iSurfaceManager->OpenSurface(aSurfaceId));
+    
+}
+
+TInt CNGAPostProcSurfaceHandler::MapSurface(const TSurfaceId& aSurfaceId, RChunk& aHandle) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:MapSurface() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:MapSurface() --"), this);
+	return(iSurfaceManager->MapSurface(aSurfaceId, aHandle));
+}
+
+TInt CNGAPostProcSurfaceHandler::SurfaceInfo(const TSurfaceId& aSurfaceId, 
+											RSurfaceManager::TInfoBuf& aInfo) 
+{
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:SurfaceInfo() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:SurfaceInfo() --"), this);
+	return(iSurfaceManager->SurfaceInfo(aSurfaceId, aInfo));
+}
+
+TInt CNGAPostProcSurfaceHandler::DestroySurface(const TSurfaceId& aSurfaceId) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:DestroySurface() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:DestroySurface() --"), this);
+	return(iSurfaceManager->CloseSurface(aSurfaceId));
+}
+
+TInt CNGAPostProcSurfaceHandler::GetBufferOffset(const TSurfaceId& aSurfaceId, TInt aBuffer, TInt& aOffset) 
+{ 
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:GetBufferOffset() aBuffer = %d++"), this, aBuffer);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:GetBufferOffset() --"), this);
+	return(iSurfaceManager->GetBufferOffset(aSurfaceId, aBuffer, aOffset));
+}
+
+TInt CNGAPostProcSurfaceHandler::AddSurfaceHint(const TSurfaceId& aSurfaceId,const RSurfaceManager::THintPair& aHint)
+{
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:AddSurfaceHint() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:AddSurfaceHint() --"), this);
+	return(iSurfaceManager->AddSurfaceHint(aSurfaceId, aHint));
+}
+
+TInt CNGAPostProcSurfaceHandler::SetSurfaceHint(const TSurfaceId& aSurfaceId,const RSurfaceManager::THintPair& aHint)
+{
+   PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:SetSurfaceHint() ++"), this);
+	PP_DEBUG(_L("CNGAPostProcSurfaceHandler[%x]:SetSurfaceHint() --"), this);
+	return(iSurfaceManager->SetSurfaceHint(aSurfaceId, aHint));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/colorconversion.c	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,63648 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "Colorconversion.h"
+
+/*
+******************************************************************************
+Name            : Emz_VDec_gColorConv_YUVtoRGB
+Description		: Converts YUV picture data to RGB data.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+				  uint8	srcImageFmt			: Specifies the color format of src data (i/p, o/p).
+				  uint8	dstImageFmt			: Specifies the color format of dst data (i/p, o/p).
+				  uint8 colorConvScheme		: Specifies the color conversion standard.(i/p)
+Return Value    : int32
+******************************************************************************
+*/
+int32 Emz_VDec_gColorConv_YUVtoRGB 
+	 (tBaseVideoFrame *srcImage, uint8 *dstImage, tWndParam *srcWindow, 
+	  tWndParam *dstWindow, uint8 srcImageFmt, uint8 dstImageFmt,
+	  uint8 colorConvScheme)
+{
+	tWndParam	lSrcWindow, lDstWindow;
+
+	if( (NULL == srcImage) || (NULL == srcImage->lum) || 
+		(NULL == dstImage) || (srcWindow == NULL)|| (dstWindow == NULL) )
+			
+	{
+		return E_OUT_OF_MEMORY;
+	}
+
+	if( (EYuv422Chroma2_BE != srcImageFmt) && (EYuv422Chroma2_LE != srcImageFmt)
+		&& (EYuv422Chroma1_BE != srcImageFmt) && (EYuv422Chroma1_LE != srcImageFmt))
+	{
+		if( (NULL == srcImage->cb) || (NULL == srcImage->cr) )
+		{
+			return E_OUT_OF_MEMORY;
+		}
+	}
+
+	lSrcWindow.xOffset		= srcWindow->xOffset;
+	lSrcWindow.yOffset		= srcWindow->yOffset;
+	lSrcWindow.wndWidth		= srcWindow->wndWidth;
+	lSrcWindow.wndHeight	= srcWindow->wndHeight;
+
+	lDstWindow.xOffset		= dstWindow->xOffset;
+	lDstWindow.yOffset		= dstWindow->yOffset;
+	lDstWindow.wndWidth		= dstWindow->wndWidth;
+	lDstWindow.wndHeight	= dstWindow->wndHeight;
+
+	lSrcWindow.xOffset		= (uint16) ((lSrcWindow.xOffset >> 1) << 1);
+	lSrcWindow.yOffset		= (uint16) ((lSrcWindow.yOffset >> 1) << 1);
+	lDstWindow.wndWidth		= (lDstWindow.wndWidth >> 1) << 1;
+	lDstWindow.wndHeight	= (lDstWindow.wndHeight >> 1) << 1;
+
+	switch (srcImageFmt)
+	{
+
+		case EYuv420Chroma1_Planar :
+
+			switch (dstImageFmt)
+			{
+
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;			
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+					case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr1toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr1toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;						
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv420Chroma2_Planar :
+
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr2toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr2toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv420Chroma3_Planar :
+
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV420Chr3toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV420Chr3toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv422Chroma1_BE :
+
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr1toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv422Chroma2_BE :
+		
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422BEChr2toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv422Chroma1_LE :
+
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr1toColor16MU_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		case EYuv422Chroma2_LE :
+
+			switch (dstImageFmt)
+			{
+				case EBitmapColor4k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor4k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;					
+					}
+				break;
+
+				case EBitmapColor64k_DitherOrdered :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;
+					}
+				break;
+
+				case EBitmapColor64k_DitherErrDiff :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;	
+					}
+				break;
+
+				case EBitmapColor16M :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16M_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16M_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16M_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16M_601_5_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;
+					}
+				break;
+
+				case EBitmapColor16MU :
+	
+					switch (colorConvScheme)
+					{
+						case EB709_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16MU_709_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_FULLRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16MU_601_5_FR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+				
+						case EB709_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16MU_709_RR 
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						case EITU601_5_REDUCEDRANGE :
+							sEmz_VDec_YUV422LEChr2toColor16MU_601_5_RR
+								(srcImage, dstImage, &lSrcWindow, &lDstWindow);
+						break;
+
+						default : 
+							return E_FAILURE;
+					}
+				break;
+
+				default : 
+					return E_FAILURE;
+			}
+
+		break;
+
+		default : 
+			return E_FAILURE;		
+	}
+
+	return E_SUCCESS;
+}
+
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** Start of Chroma2 format *******************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
+
+
+/****** Functions for YUV420 input *******/
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_Ordered_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16M_709_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16M_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16M_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16M_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16M_709_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16M_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;          
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16M_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16M_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;          
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_Ordered_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16MU_709_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16MU_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16MU_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16MU_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16MU_709_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16MU_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor16MU_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor16MU_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr = lCrPtr[j >> 1];
+            lCb = lCbPtr[j >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/**** End of YUV420 input *****/
+
+
+
+/**** Start of YUV422BE input *****/
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16M_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16M_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16M_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16M_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16MU_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16MU_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16MU_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor16MU_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/***** End of YUV422BE input ****/
+
+
+
+/**** Start of YUV422LE input *****/
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16M_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16M_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16M_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16M_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+            
+            /*Fourth Pixel*/            
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16MU_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16MU_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16MU_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor16MU_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/***** End of YUV422LE input ****/
+
+
+
+
+
+
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            
+			lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+            
+			lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr2toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCr = lCrPtr[k >> 1];
+            lCb = lCbPtr[k >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr = lCrPtr[(k + lLumWidth) >> 1];
+            lCb = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr -= 128;
+            lCb -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr2toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[0];
+            lCr = lYuyvPtr[2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth];
+            lCr = lYuyvPtr[lLumWidth + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1)];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (25801 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb) + (7670 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (22973 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb) + (11699 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (29374 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb) + (8731 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr2toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr, lCb;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < lWidth; k += 2)
+		{
+            lCb = lYuyvPtr[3];
+            lCr = lYuyvPtr[1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[lLumWidth + 3];
+            lCr = lYuyvPtr[lLumWidth + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lCb = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb -= 128;
+            lCr -= 128;
+
+            lTemp1 = (26748 * lCr) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb) + (13621 * lCr)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr += ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** End of Chroma2 format *********************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
+
+
+
+
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** Start of Chroma1 format *******************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 4;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 6;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 3);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 2) << 5;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 3) << 11;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16M_709_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16M_709_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint8 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+        }
+
+			lCr1 = lCrPtr[j >> 1];
+			lCb1 = lCbPtr[j >> 1];
+		
+			lCr1 -= 128;
+			lCb1 -= 128;
+
+			lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+			lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+			lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+			/*Third Pixel*/
+			lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+			/*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+			/*Fourth Pixel*/
+			lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+			lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16M_601_5_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16M_601_5_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint8 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+        }
+
+			lCr1 = lCrPtr[j >> 1];
+			lCb1 = lCbPtr[j >> 1];
+		
+			lCr1 -= 128;
+			lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+			/*Third Pixel*/
+			lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+			/*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+			/*Fourth Pixel*/
+			lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+			lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16M_709_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16M_709_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint8 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+        }
+
+			lCr1 = lCrPtr[j >> 1];
+			lCb1 = lCbPtr[j >> 1];
+		
+			lCr1 -= 128;
+			lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+			/*Third Pixel*/
+			lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+			/*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+			/*Fourth Pixel*/
+			lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+			lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16M_601_5_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16M_601_5_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint8 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+        }
+
+			lCr1 = lCrPtr[j >> 1];
+			lCb1 = lCbPtr[j >> 1];
+		
+			lCr1 -= 128;
+			lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+
+			/*Third Pixel*/
+			lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr1[2] = (uint8) lTemp;
+
+
+			/*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+
+			/*Fourth Pixel*/
+			lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr1[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[4] = (uint8) lTemp;
+           
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+			lRGBFramePtr += 6;
+			lRGBFramePtr1 += 6;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_FR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_RR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+        lCr1 = lCrPtr[j >> 1];
+        lCb1 = lCbPtr[j >> 1];
+		
+        lCr1 -= 128;
+        lCb1 -= 128;
+
+        lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+        lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+        lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+        /*First Pixel*/
+        lY1 = lLumPtr[j];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[0] = (uint16)(lTemp4);
+
+        /*Third Pixel*/
+        lY1 = lLumPtr[j + lLumWidth];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+
+        /*Second Pixel*/
+        lY1 = lLumPtr[j + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1 + 15;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+        /*Fourth Pixel*/
+        lY1 = lLumPtr[j + lLumWidth + 1];
+		lY1 -= 16;
+		lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+		/*B component*/
+        lTemp = lY1 + lTemp3 + 5;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 = (lTemp >> 4);
+
+        /*G component*/
+        lTemp = lY1 - lTemp2 + 10;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 4;
+            
+        /*R component*/
+        lTemp = lY1 + lTemp1;
+        if (lTemp < 0)
+            lTemp = 0;
+        if (lTemp > 255)
+            lTemp = 255;
+        lTemp4 |= (lTemp >> 4) << 8;
+
+        lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+        lRGBFramePtr += 2;
+		lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16MU_709_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16MU_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16MU_601_5_FR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16MU_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16MU_709_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16MU_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor16MU_601_5_RR
+Description		: Converts YUV420 Chroma2 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor16MU_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+
+/************** End of YUV420 input *************/
+
+/************** Start of YUV422BE input ********/
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16M_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16M_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16M_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16M_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16MU_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16MU_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16MU_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor16MU_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/************** End of YUV422BE input *******************/
+
+
+
+
+
+/************** Start of YUV422LE input ********/
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16M_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16M_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16M_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16M_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16M_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16M_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16M_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to RGB888 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16M_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraCol, extraRow;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1 ;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/         
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[1] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			
+            lRGBFramePtr[2] = (uint8) lTemp;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = (lY1 + lTemp1);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+            lRGBFramePtr[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = (lY1 - lTemp2);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = (lY1 + lTemp3);
+			if (lTemp < 0)
+            	lTemp = 0;
+            if (lTemp > 255)
+            	lTemp = 255;
+			lRGBFramePtr[5] = (uint8) lTemp;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+	
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_Ordered_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+   
+	lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                       
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			/*Third Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+                        
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			/*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)lTemp4;
+
+			/*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)lTemp4;
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+         
+			/*Third Pixel*/
+			lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)lTemp4;
+
+			/*Fourth Pixel*/
+			lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16MU_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16MU_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16MU_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor16MU_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma1 Interleaved to XRGB (8:8:8:8) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor16MU_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lYuyvPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+ 
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+
+    for(i = 0; i < lHeight; i++)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+        }
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)lTemp4;
+
+            /*Second Pixel*/            
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)lTemp4;
+
+			lYuyvPtr += 4;
+            lRGBFramePtr += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			 lRGBFramePtr++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+        lRGBFramePtr  += (wndWidth - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/************** End of YUV422LE input *******************/
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma1 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma1 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr1toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 4);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+			lCr2 = lCrPtr[(k + lLumWidth) >> 1 + 1];
+			lCb2 = lCbPtr[(k + lLumWidth) >> 1 + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			/*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+			
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Seventh Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1)) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Eighth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 2) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + (lSrcWidth << 1) + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + (lSrcWidth << 1) + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + (lSrcWidth << 1) + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV422 BE (UYVY) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422BEChr1toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+			lCb2 = lYuyvPtr[4];
+			lCr2 = lYuyvPtr[6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+			lCb2 = lYuyvPtr[lLumWidth + 4];
+			lCr2 = lYuyvPtr[lLumWidth + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 4];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 6];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[0];
+            lCr1 = lYuyvPtr[2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth];
+            lCr1 = lYuyvPtr[lLumWidth + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth << 1];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 3];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to RGB565 Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor64k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_FR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_709_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV422 LE (YVYU) Chroma2 Interleaved to XRGB (4:4:4:4) Interleaved format.
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV422LEChr1toColor4k_ErrDiff_601_5_RR
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint16 *dest1, *dest2;
+    uint8  *lYuyvPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+	int32  diff1, diff2, diff3;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, k, extraCol, extraRow;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lYuyvPtr  = srcImage->lum + (srcYOffset * (lLumWidth << 1)) + (srcXOffset << 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+   	lLumWidth <<= 1;
+
+    for(i = 0; i < lHeight; i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+			lCb2 = lYuyvPtr[7];
+			lCr2 = lYuyvPtr[5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*First Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+			lCb2 = lYuyvPtr[lLumWidth + 7];
+			lCr2 = lYuyvPtr[lLumWidth + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            /*Third Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+			lCb2 = lYuyvPtr[(lLumWidth << 1) + 7];
+			lCr2 = lYuyvPtr[(lLumWidth << 1) + 5];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCb2 -= 128;
+            lCr2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCb1 = lYuyvPtr[3];
+            lCr1 = lYuyvPtr[1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+			lY1 = lYuyvPtr[2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+			lY1 = lYuyvPtr[0];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[lLumWidth + 3];
+            lCr1 = lYuyvPtr[lLumWidth + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lYuyvPtr[lLumWidth + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lYuyvPtr[lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCb1 = lYuyvPtr[(lLumWidth << 1) + 3];
+            lCr1 = lYuyvPtr[(lLumWidth << 1) + 1];
+
+            lCb1 -= 128;
+            lCr1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1) + 2];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lYuyvPtr[(lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			lYuyvPtr += 4;
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			 dest1++;
+			*dest2 = dest2[-1];
+			 dest2++;
+		}
+
+		lYuyvPtr +=  ((lLumWidth - lWidth) << 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** End of Chroma1 format *********************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
+
+
+
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** Start of Chroma3 format *******************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_Ordered_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 16-bit 
+       {5,6,5} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,3,2}  {4,0,6} |
+       |  {6,1,4}  {2,2,0} | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 6;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1 + 4;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+			/*B component*/
+            lTemp = lY1 + lTemp3 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 3);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 2) << 5;
+            
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 3) << 11;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_Ordered_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint16 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+    /* This function performs YUV to RGB conversion with dithering for 12-bit 
+       {4,4,4} RGB. The 2x2 dither pattern used for {R,G,B} colors is as follows:
+
+       |  {0,15,5}   {10,0,15} |
+       |  {15,5,10}  {5,10,0}  | */
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            /*First Pixel*/
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[0] = (uint16)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr[1] = (uint16)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 15;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[0] = (uint16)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3 + 5;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (lTemp >> 4);
+
+            /*G component*/
+            lTemp = lY1 - lTemp2 + 10;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 4;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= (lTemp >> 4) << 8;
+
+            lRGBFramePtr1[1] = (uint16)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16M_709_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16M_709_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16M_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16M_601_5_FR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+			if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16M_709_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16M_709_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16M_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB888 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16M_601_5_RR 
+		(tBaseVideoFrame *srcImage, uint8* dstImage,
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+    uint8  *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+    int32  i, j, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth * 3;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+	
+	dstXOffset *= 3;
+	wndWidth   *= 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr  = dstImage + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+            
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+        }
+
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;    
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+			lRGBFramePtr[2] = (uint8) lTemp;
+      
+            /*Second Pixel*/
+			lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+      
+			lRGBFramePtr[3] = (uint8) lTemp; 
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[4] = (uint8) lTemp;
+
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            
+			lRGBFramePtr[5] = (uint8) lTemp;
+            
+			
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[0] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[1] = (uint8) lTemp;
+            
+			/*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+
+            lRGBFramePtr1[2] = (uint8) lTemp;
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[3] = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lRGBFramePtr1[4] = (uint8) lTemp;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+                      
+			lRGBFramePtr1[5] = (uint8) lTemp;
+
+            lRGBFramePtr += 6;
+            lRGBFramePtr1 += 6;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr = lRGBFramePtr[-3];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-3];
+			lRGBFramePtr1++;
+
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+        lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth * 3; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+	}
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16MU_709_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16MU_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16MU_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16MU_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16MU_709_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16MU_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor16MU_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (8:8:8:8) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor16MU_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow,  tWndParam* dstWindow)
+{
+    uint32 *lRGBFramePtr, *lRGBFramePtr1;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3, lTemp4;
+    int32  i, j, extraRow, extraCol;
+	int32 srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		  cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    lRGBFramePtr = (uint32*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    lRGBFramePtr1 = lRGBFramePtr + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+        for(j = 0; j < (lWidth - 2); j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+			lCr2 = lCrPtr[(j >> 1) + 1];
+			lCb2 = lCbPtr[(j >> 1) + 1];
+
+			lCr3 = lCrPtr[(j >> 1) + (lLumWidth >> 1)];
+			lCb3 = lCbPtr[(j >> 1) + (lLumWidth >> 1)];
+
+			lCr4 = lCrPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+			lCb4 = lCbPtr[(j >> 1) + (lLumWidth >> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+        }
+
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr += (lLumWidth >> 1);
+        lCbPtr += (lLumWidth >> 1);
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+            lCr1 = lCrPtr[j >> 1];
+            lCb1 = lCbPtr[j >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[j];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+          
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[0] = (uint32)(lTemp4);
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[j + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr[1] = (uint32)(lTemp4);
+
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[j + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[0] = (uint32)(lTemp4);
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[j + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            /*B component*/
+            lTemp = lY1 + lTemp3;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 = (uint8) lTemp;
+
+            /*G component*/
+            lTemp = lY1 - lTemp2;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 8;
+
+			/*R component*/
+            lTemp = lY1 + lTemp1;
+            if (lTemp < 0)
+                lTemp = 0;
+            if (lTemp > 255)
+                lTemp = 255;
+            lTemp4 |= lTemp << 16;
+
+            lRGBFramePtr1[1] = (uint32)(lTemp4);
+
+            lRGBFramePtr += 2;
+			lRGBFramePtr1 += 2;
+		}
+
+		if(extraCol)
+		{
+			*lRGBFramePtr = lRGBFramePtr[-1];
+			lRGBFramePtr++;
+			*lRGBFramePtr1 = lRGBFramePtr1[-1];
+			lRGBFramePtr1++;
+		}
+
+        lRGBFramePtr  += ((wndWidth << 1) - lTempWidth);
+		lRGBFramePtr1 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		lRGBFramePtr1 = lRGBFramePtr - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+			*lRGBFramePtr++ = *lRGBFramePtr1++;
+		}
+		if(extraCol)
+		{
+			*lRGBFramePtr = *lRGBFramePtr1;
+		}
+	}
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+		}
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+		}
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+		}
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to RGB565 Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor64k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 3 |  (*(src1 + 1) >> 2) << 5 | (*src1 >> 3) << 11);
+			diff1 = *src1 & 0x7;
+			diff2 = *(src1 + 1) & 0x3;
+			diff3 = *(src1 + 2) & 0x7;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 3 |  (*(src1 + 4) >> 2) << 5 | (*(src1 + 3) >> 3) << 11);
+			diff1 = *(src1 + 3) & 0x7;
+			diff2 = *(src1 + 4) & 0x3;
+			diff3 = *(src1 + 5) & 0x7;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 3 |  (*(src2 + 1) >> 2) << 5 | (*src2 >> 3) << 11);
+			diff1 = *src2 & 0x7;
+			diff2 = *(src2 + 1) & 0x3;
+			diff3 = *(src2 + 2) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 3 |  (*(src2 + 4) >> 2) << 5 | (*(src2 + 3) >> 3) << 11);
+			diff1 = *(src2 + 3) & 0x7;
+			diff2 = *(src2 + 4) & 0x3;
+			diff3 = *(src2 + 5) & 0x7;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+		}
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (25801 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb4) + (7670 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (25801 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb3) + (7670 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (25801 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb2) + (7670 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (25801 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3072 * lCb1) + (7670 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (30397 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_FR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_FR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (22973 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb4) + (11699 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (22973 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb3) + (11699 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (22973 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb2) + (11699 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (22973 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((5637 * lCb1) + (11699 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (29032 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 255) ? 255 : ((lTemp < 0) ? 0 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_709_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (29374 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb4) + (8731 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (29374 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb3) + (8731 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (29374 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb2) + (8731 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (29374 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((3494 * lCb1) + (8731 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (34603 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_RR
+Description		: Converts YUV420 Chroma3 Planar to XRGB (4:4:4:4) Interleaved format
+Parameter       : tBaseVideoFrame *srcImage	: Pointer to the source frame (i/p),
+                  uint8 *dstImage			: Pointer to rgb data (o/p).
+				  tWndParam *srcWindow		: Pointer to structure containing source window
+											  parameters like xOffset,yOffset,cropWidth,
+											  cropHeight. (i/p)
+				  tWndParam *dstWindow		: Pointer to structure containing destination window
+											  parameters like xOffset,yOffset,windWidth,
+										      windHeight. (i/p)
+Return Value    : void
+******************************************************************************
+*/
+
+void sEmz_VDec_YUV420Chr3toColor4k_ErrDiff_601_5_RR 
+		(tBaseVideoFrame* srcImage, uint8* dstImage, 
+		 tWndParam* srcWindow, tWndParam* dstWindow)
+{
+	uint16 *dest1, *dest2;
+    uint8  *lLumPtr, *lCrPtr, *lCbPtr;
+	uint8  *lBuffer;
+	uint8  *src1, *src2;
+	uint8  *lPtr1, *lPtr2;
+    int32  lLumWidth, lWidth, lHeight, lTempWidth, lSrcWidth;
+    int32  lY1, lCr1, lCb1, lCr2, lCb2, lCr3, lCb3, lCr4, lCb4;
+    int32  lTemp, lTemp1, lTemp2, lTemp3;
+	int32  diff1, diff2, diff3;
+    int32  i, j, k, extraRow, extraCol;
+	int32  srcXOffset,srcYOffset,dstXOffset,dstYOffset,
+		   cropWidth,cropHeight,wndWidth,wndHeight;
+
+	srcXOffset = srcWindow->xOffset;
+	srcYOffset = srcWindow->yOffset;
+	cropWidth  = srcWindow->wndWidth;
+	cropHeight = srcWindow->wndHeight;
+
+	dstXOffset = dstWindow->xOffset;
+	dstYOffset = dstWindow->yOffset;
+	wndWidth   = dstWindow->wndWidth;
+	wndHeight  = dstWindow->wndHeight;
+
+	if ((srcImage->width - srcXOffset) >= cropWidth)
+	{
+		lWidth = cropWidth;
+	}
+	else
+	{
+		lWidth = srcImage->width - srcXOffset;
+	}
+
+	if ((srcImage->height - srcYOffset) >= cropHeight)
+	{
+		lHeight = cropHeight;
+	}
+	else
+	{
+		lHeight = srcImage->height - srcYOffset;
+	}
+
+	if (lWidth > (wndWidth - dstXOffset))
+	{
+		lWidth = wndWidth - dstXOffset;
+	}
+
+	if (lHeight > (wndHeight - dstYOffset))
+	{
+		lHeight = wndHeight - dstYOffset;
+	}
+
+	extraCol = lWidth & 0x01;
+	extraRow = lHeight & 0x01;
+
+	lTempWidth = lWidth;
+	lWidth = (lWidth >> 1) << 1;
+	lHeight = (lHeight >> 1) << 1;
+
+	lBuffer = (uint8*) malloc(lWidth * 3 * 3);
+
+	lSrcWidth = lWidth * 3;
+
+    lLumWidth = (srcImage->width >> 1) << 1;
+    lLumPtr = srcImage->lum + (srcYOffset * lLumWidth) + srcXOffset;
+    lCbPtr = srcImage->cb + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+    lCrPtr = srcImage->cr + (((srcYOffset * (lLumWidth >> 1)) + srcXOffset) >> 1);
+
+    dest1 = (uint16*)(dstImage) + (dstYOffset * wndWidth) + dstXOffset;
+    dest2 = dest1 + wndWidth;
+
+    for(i = 0; i < (lHeight - 2); i += 2)
+    {
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = lCrPtr[((k + lLumWidth)>> 1) + 1];
+			lCb4 = lCbPtr[((k + lLumWidth)>> 1) + 1];
+
+			lCr4 = (lCr1 + lCr2 + lCr3 + lCr4) >> 2;
+			lCb4 = (lCb1 + lCb2 + lCb3 + lCb4) >> 2;
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+			lCr3 = (lCr1 + lCr3) >> 1;
+			lCb3 = (lCb1 + lCb3) >> 1;
+
+            /*First Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            /*Third Pixel*/
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr1 = lCrPtr[(k + lLumWidth) >> 1];
+            lCb1 = lCbPtr[(k + lLumWidth) >> 1];
+
+            lCr2 = lCrPtr[((k + lLumWidth) >> 1) + 1];
+            lCb2 = lCbPtr[((k + lLumWidth) >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+            /*Fifth Pixel*/
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr3 = lCrPtr[(k + lLumWidth)>> 1];
+			lCb3 = lCbPtr[(k + lLumWidth)>> 1];
+
+			lCr4 = (lCr1 + lCr3) >> 1;
+			lCb4 = (lCb1 + lCb3) >> 1;
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr4 -= 128;
+            lCb4 -= 128;
+
+            lTemp1 = (26748 * lCr4) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb4) + (13621 * lCr4)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb4) >> COLOR_CONV_PRECISION;
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr3 -= 128;
+            lCb3 -= 128;
+
+            lTemp1 = (26748 * lCr3) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb3) + (13621 * lCr3)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb3) >> COLOR_CONV_PRECISION;
+
+            /*Fifth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1)];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Sixth Pixel*/
+            lY1 = lLumPtr[k + (lLumWidth << 1) + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + lSrcWidth + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + lSrcWidth + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + lSrcWidth + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        lLumPtr += (lLumWidth << 1);
+        lCrPtr  += (lLumWidth >> 1);
+        lCbPtr  += (lLumWidth >> 1);
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+    }
+
+
+		lPtr1 = src1 = lBuffer;
+		lPtr2 = src2 = src1 + lSrcWidth;
+
+		for(k = 0; k < (lWidth - 2); k += 2)
+		{
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+			lCr2 = lCrPtr[(k >> 1) + 1];
+			lCb2 = lCbPtr[(k >> 1) + 1];
+
+			lCr2 = (lCr1 + lCr2) >> 1;
+			lCb2 = (lCb1 + lCb2) >> 1;
+
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+
+            lCr2 -= 128;
+            lCb2 -= 128;
+
+            lTemp1 = (26748 * lCr2) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb2) + (13621 * lCr2)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb2) >> COLOR_CONV_PRECISION;
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+           /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+		}
+
+            lCr1 = lCrPtr[k >> 1];
+            lCb1 = lCbPtr[k >> 1];
+
+            lCr1 -= 128;
+            lCb1 -= 128;
+
+            lTemp1 = (26748 * lCr1) >> COLOR_CONV_PRECISION;
+            lTemp2 = ((6563 * lCb1) + (13621 * lCr1)) >> COLOR_CONV_PRECISION;
+            lTemp3 = (33802 * lCb1) >> COLOR_CONV_PRECISION;
+
+            /*First Pixel*/
+            lY1 = lLumPtr[k];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src1 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Second Pixel*/
+            lY1 = lLumPtr[k + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src1 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src1 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src1 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Third Pixel*/
+            lY1 = lLumPtr[k + lLumWidth];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*src2 = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 1) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 2) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            /*Fourth Pixel*/
+            lY1 = lLumPtr[k + lLumWidth + 1];
+			lY1 -= 16;
+			lY1 = (lY1 * 19075) >> COLOR_CONV_PRECISION;
+
+            lTemp = lY1 + lTemp1;
+			*(src2 + 3) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 - lTemp2;
+            *(src2 + 4) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+            lTemp = lY1 + lTemp3;
+			*(src2 + 5) = (uint8)((lTemp > 235) ? 235 : ((lTemp < 16) ? 16 : lTemp));
+
+			src1 += 6;
+			src2 += 6;
+
+
+		src1 = lPtr1;
+		src2 = lPtr2;
+
+        for(j = 0; j < lWidth; j += 2)
+        {
+			/* First Pixel */
+			*dest1 = (uint16) (*(src1 + 2) >> 4 |  (*(src1 + 1) >> 4) << 4 | (*src1 >> 4) << 8);
+			diff1 = *src1 & 0xf;
+			diff2 = *(src1 + 1) & 0xf;
+			diff3 = *(src1 + 2) & 0xf;
+
+			// diffuse the error
+			sDiffuse(i,j,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			/* Second Pixel */
+			*(dest1 + 1) = (uint16) (*(src1 + 5) >> 4 |  (*(src1 + 4) >> 4) << 4 | (*(src1 + 3) >> 4) << 8);
+			diff1 = *(src1 + 3) & 0xf;
+			diff2 = *(src1 + 4) & 0xf;
+			diff3 = *(src1 + 5) & 0xf;
+			// diffuse the error
+			sDiffuse(i,j+1,diff1,lWidth,lHeight,lPtr1,lSrcWidth, 3);     //r
+			sDiffuse(i,j+1,diff2,lWidth,lHeight,lPtr1 + 1,lSrcWidth, 3); //g
+			sDiffuse(i,j+1,diff3,lWidth,lHeight,lPtr1 + 2,lSrcWidth, 3); //b
+
+			src1  += 6;
+			dest1 += 2;
+
+			/* Third Pixel */			
+			*dest2 = (uint16) (*(src2 + 2) >> 4 |  (*(src2 + 1) >> 4) << 4 | (*src2 >> 4) << 8);
+			diff1 = *src2 & 0xf;
+			diff2 = *(src2 + 1) & 0xf;
+			diff3 = *(src2 + 2) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			/* Fourth Pixel */
+			*(dest2 + 1) = (uint16) (*(src2 + 5) >> 4 |  (*(src2 + 4) >> 4) << 4 | (*(src2 + 3) >> 4) << 8);
+			diff1 = *(src2 + 3) & 0xf;
+			diff2 = *(src2 + 4) & 0xf;
+			diff3 = *(src2 + 5) & 0xf;
+			//diffuse the error
+			sDiffuse(i+1,j+1,diff1,lWidth,lHeight,lPtr2,lSrcWidth, 3);     //r
+			sDiffuse(i+1,j+1,diff2,lWidth,lHeight,lPtr2 + 1,lSrcWidth, 3); //g
+			sDiffuse(i+1,j+1,diff3,lWidth,lHeight,lPtr2 + 2,lSrcWidth, 3); //b
+
+			src2  += 6;
+			dest2 += 2;			
+        }
+
+		if(extraCol)
+		{
+			*dest1 = dest1[-1];
+			dest1++;
+			*dest2 = dest2[-1];
+			dest2++;
+		}
+
+        dest1 += ((wndWidth << 1) - lTempWidth);
+		dest2 += ((wndWidth << 1) - lTempWidth);
+
+	if(extraRow)
+	{
+		dest2 = dest1 - wndWidth;
+		for(j = 0; j < lWidth; j += 2)
+		{
+			*dest1++ = *dest2++;
+			*dest1++ = *dest2++;
+		}
+		if(extraCol)
+		{
+			*dest1 = *dest2;
+		}
+	}
+
+	free(lBuffer);
+	return;
+}
+
+/*
+******************************************************************************
+Name            : sDiffuse
+Description		: Diffuses the quantization error to the neighbouring pixels.
+Parameter       : int32 i			: x position of the current pixel.
+				  int32 j			: y position of the current pixel.
+				  int32 diff		: error to be diffused.
+				  int32 actWidth	: Source Width
+				  int32 actHeight	: Source Height
+				  uint8 *lLumPtr	:
+				  int32 lLumWidth	:
+				  uint8 skip		:
+
+Return Value    : void
+******************************************************************************
+*/
+
+void sDiffuse(int32 i, int32 j, int32 diff, int32 actWidth, int32 actHeight, uint8 *lLumPtr,
+			  int32 lLumWidth,  uint8 skip)
+{
+	int32 tmp;
+
+	if(i < actHeight - 2)
+	{
+		if(j < actWidth - 2)
+		{
+			if(j > 1)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else if(j > 0)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);				
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);				
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+		}
+		else if(j < actWidth - 1)
+		{
+			tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);			
+			lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);			
+			lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+		}
+		else
+		{
+			tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);			
+			lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+		}
+	}
+	else if(i < actHeight - 1)
+	{
+		if(j < actWidth - 2)
+		{
+			if(j > 1)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);				
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else if(j > 0)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);				
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);				
+				lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+				tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);				
+				lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+		}
+		else if(j < actWidth - 1)
+		{
+			tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);			
+			lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);			
+			lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[(j + 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j + 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+		}
+		else
+		{
+			tmp = lLumPtr[(j - 1) * skip + lLumWidth] + ((diff << 3) >> 6);			
+			lLumPtr[(j - 1) * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			tmp = lLumPtr[j * skip + lLumWidth] + ((diff << 4) >> 6);			
+			lLumPtr[j * skip + lLumWidth] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+		}
+	}
+	else
+	{
+		if(j < actWidth - 2)
+		{
+			if(j > 1)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else if(j > 0)
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+			else
+			{
+				tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);				
+				lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+			}
+		}
+		else if(j < actWidth - 1)
+		{
+			tmp = lLumPtr[(j + 1) * skip] + ((diff * 24) >> 6);			
+			lLumPtr[(j + 1) * skip] = (uint8)((tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp));
+
+		}
+		else
+		{
+			return;
+		}
+	}
+
+	return;
+}
+
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+/**************** End of Chroma3 format *********************/
+/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor_shai/src/myfopen.c	Thu Sep 16 18:57:38 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* 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:
+*
+*/
+
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+void winscw_workaround()
+{
+    fopen(0,0);
+    fread(0,0,0,0);
+    iscntrl(0);
+    realloc(0,0);
+    calloc(0,0);
+}
+#ifdef __cplusplus
+
+}
+#endif
--- a/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/inc/AudioRoutingTestClass.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/inc/AudioRoutingTestClass.h	Thu Sep 16 18:57:38 2010 +0100
@@ -399,10 +399,10 @@
 		TInt CreateVideoWindow();
 		TInt DeleteVideoWindow();
 		TInt CreateSessionAndScreen();
-		TInt CreateVideoObject( CStifItemParser& aItem );
+		TInt CreateVideoObject();
 		TInt CreateWindowGroup();
 		TInt EndDrawing();
-
+		TInt CreateVideoRecorderObject();
 		TInt AudioInput();
 		TInt SetAudioInputL();
 		TInt AudioOutput();
--- a/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocks.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocks.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -566,21 +566,16 @@
 	else if (object == KTagVideoPlayer)
 		{
 		aItem.GetNextString ( object );
-		if(object==_L("Input"))
-			{
-			isInput = ETrue;
-			}
-		else if(object==_L("Output"))
-			{
-			isInput = EFalse;
-			}
 		error = KErrNone;
 		TRAP(error, CreateSessionAndScreen());
 		TRAP(error, CreateWindowGroup());
 		TRAP(error, CreateVideoWindow());
-		TRAP(error, CreateVideoObject(aItem));
-
+		TRAP(error, CreateVideoObject());	    
 		}
+	else if(object == KTagVideoRecord)
+	    {
+        TRAP(error, CreateVideoRecorderObject());        
+	    }
 	if (error == KErrNone)
 		{
 	    AddExpectedEvent(EInitializeComplete, KMediumTimeout);
@@ -606,8 +601,7 @@
 	if ( object == KTagVideoRecord )
 		{
 		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput")));
-		iLog->Log(_L("CAudioRoutingTest::CAudioInput"));
-		iVideoRecord = NULL;
+		iLog->Log(_L("CAudioRoutingTest::CAudioInput"));		
 		TRAP(error, iAudioInput = CAudioInput::NewL(*iVideoRecord));
 		if (error == KErrNone)
 			{
@@ -768,7 +762,7 @@
 		}
 	if (error != KErrNone)
 	    {
-	     iLog->Log(_L("CAudioRoutingTestClass::CreateAudioInput ERROR [%d]"),error);
+	     iLog->Log(_L("CAudioRoutingTestClass::CreateAudioInput ERROR [%d] for [%s]"),error,&object);
 	    }
 	return error;
 }
@@ -866,36 +860,46 @@
     return error;
 	}
 
-TInt CAudioRoutingTestClass::CreateVideoObject( CStifItemParser& aItem )
+TInt CAudioRoutingTestClass::CreateVideoObject( )
 	{
-	TInt error = KErrNone;
-	TPtrC object;
-	aItem.GetNextString ( object );
-	TRAP(error, iVideoPlayerUtility = CVideoPlayerUtility::NewL ( *this,
-            EMdaPriorityNormal,
-            EMdaPriorityPreferenceNone,
-            iWindowSession,
-			*iScreenDevice,
-			iWindow,
-			iRect,
-			iRect));
-	if (error == KErrNone)
-		{
-		TRAP(error, iVideoPlayerUtility->OpenFileL(K3gpTestFile));
-		if (error == KErrNone)
-			{
-			if (!(isInput))
-				{
-				TRAP(error, iVideoRecord = CVideoRecorderUtility::NewL(*this));
-				}
-			}
-		}
+    TInt error = KErrNone;
+
+
+    TRAP(error, iVideoPlayerUtility = CVideoPlayerUtility::NewL ( *this,
+                    EMdaPriorityNormal,
+                    EMdaPriorityPreferenceNone,
+                    iWindowSession,
+                    *iScreenDevice,
+                    iWindow,
+                    iRect,
+                    iRect));
+    if (error == KErrNone)
+        {
+        TRAP(error, iVideoPlayerUtility->OpenFileL(K3gpTestFile));
+        //		AddExpectedEvent(EInitializeComplete, 6000);	
+        CActiveScheduler::Start();
+        }
     if (error == KErrNone)
-    	{
-    	EndDrawing();
-    	iWindow.Close();
-    	iWindowGroup.Close();
-    	}
+        {
+        EndDrawing();
+        iWindow.Close();
+        iWindowGroup.Close();
+        }
+    return error;
+
+    }
+TInt CAudioRoutingTestClass::CreateVideoRecorderObject()
+    {
+    TInt error = KErrNone;
+    TRAP(error, iVideoRecord = CVideoRecorderUtility::NewL(*this));
+
+            if (error == KErrNone)
+                {
+//                const TUid KVidTstControllerUid = {0x101F8503};
+                TUid NULLUid ={0};
+                
+                TRAP(error,iVideoRecord->OpenFileL(K3gpTestFile, NULL, NULLUid, NULLUid));                
+                }
 
     return error;
 	}
@@ -1010,12 +1014,21 @@
 
 TInt CAudioRoutingTestClass::SetSecureOutputL()
    {
+        TInt err;
 	if(iAudioOutput)
-		{
-		iAudioOutput->SetSecureOutputL(EFalse);
-		}
-	iLog->Log(_L("iAudioOutput - SetSecureOutputL "));
-	return KErrNone;
+	   {
+	    TRAP(err,iAudioOutput->SetSecureOutputL(EFalse));
+	   }
+	if(err == KErrNotSupported)
+	   {
+	   iLog->Log(_L("SetsecureoutputL is deprecated,so not supported"));
+	   return KErrNone;
+	   }
+	else
+	   {
+	   return KErrGeneral;
+	   }
+	
    }
 
 TInt CAudioRoutingTestClass::UnregisterObserver()
--- a/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocksCallbacks.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mm_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocksCallbacks.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -304,9 +304,8 @@
 		iLog->Log(_L("Ready!"));
 		}
 	if (isInput != EFalse)
-		{
-
-		}
+		{}
+	CActiveScheduler::Stop();
 	}
 
 void CAudioRoutingTestClass::MvpuoPrepareComplete(TInt aError)
--- a/mm_plat/audio_routing_api/tsrc/Conf/AudioRoutingTestClass.cfg	Thu Sep 16 18:39:58 2010 +0100
+++ b/mm_plat/audio_routing_api/tsrc/Conf/AudioRoutingTestClass.cfg	Thu Sep 16 18:57:38 2010 +0100
@@ -44,6 +44,8 @@
 [Test]
 title 1.2. Create AudioRouting CAudioInput - VideoRecorder
 create AudioRoutingTestClass AudioRoutingTest
+AudioRoutingTest CreateObject  VideoRecord
+
 AudioRoutingTest AudioInput VideoRecord
 delete AudioRoutingTest
 [Endtest]
@@ -253,7 +255,7 @@
 [Test]
 title 17. Create AudioRouting CAudioOutput - VideoPlayer 
 create AudioRoutingTestClass AudioRoutingTest
-AudioRoutingTest CreateObject VideoPlayer Output
+AudioRoutingTest CreateObject VideoPlayer 
 waittestclass AudioRoutingTest
 AudioRoutingTest AudioInput VideoPlayer
 AudioRoutingTest AudioInputs
@@ -264,7 +266,7 @@
 [Test]
 title 18. Create AudioRouting CAudioOutput - VideoPlayer 
 create AudioRoutingTestClass AudioRoutingTest
-AudioRoutingTest CreateObject VideoPlayer Input
+AudioRoutingTest CreateObject VideoPlayer 
 waittestclass AudioRoutingTest
 AudioRoutingTest AudioInput VideoPlayer
 AudioRoutingTest DefaultAudioOutput
--- a/mmhais/refacladapt/src/audiostream/audiostream.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmhais/refacladapt/src/audiostream/audiostream.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -655,6 +655,9 @@
 	iCurrentStreamState = aPreviousState;
 	iDesiredStreamState = aDesiredState;
 
+	// Ensure that there is no dereference of a NULL pointer
+	ASSERT(iDesiredStreamState < EInitialized || iDesiredStreamState > EActive || iCodec);
+	
 	switch (iDesiredStreamState)
 		{
 		case EInitialized:
--- a/mmlibs/mmfw/Recogniser/src/filereader.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/Recogniser/src/filereader.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -93,7 +93,8 @@
 		{
 		// We need to seek to the start and fill the buffer.
 		iFilePos = 0;
-		TInt err = iFile->Seek(ESeekStart, iFilePos);
+		TInt filepos = 0;
+		TInt err = iFile->Seek(ESeekStart, filepos);
 		if (err == KErrNone)
 			{
 			err = iFile->Read(iFileBuffer);
@@ -135,18 +136,31 @@
 //
 void CFileReader::SeekL(TInt64 aOffset)
 	{
-	if (aOffset < (TInt64)KMinTInt)
+	if (aOffset < KMinTInt64)
 		{
 		User::Leave(KErrNotSupported);
 		}
 		
-	if (aOffset > (TInt64)KMaxTInt)
+	if (aOffset > KMaxTInt64)
 		{
 		User::Leave(KErrNotSupported);
 		}
-		
-	TInt low = (TInt)I64LOW(aOffset);
-	SeekL(low);
+	
+	if (aOffset < (TInt64)KMaxTInt)
+	    {
+        TInt low = (TInt)I64LOW(aOffset);
+        SeekL(low);
+	    }
+	else
+	    {
+        TInt err = CReader::Seek(aOffset);
+        if (err == KErrUnderflow)
+            {
+            TInt64 bufPos = CBufferReader::Position();
+            aOffset += bufPos - iFileBuffer.Length();
+            User::LeaveIfError(PhysicallySeekAndRead(aOffset));
+            }
+	    }
 	}
 	
 //
@@ -161,7 +175,31 @@
 	CBufferReader::Reset();
 	
 	iFilePos = aOffset;
-	err = iFile->Seek(ESeekCurrent, iFilePos);
+	err = iFile->Seek(ESeekCurrent, aOffset);
+	
+	if (err != KErrNone)
+		{
+		return err;
+		}
+
+	err = iFile->Read(iFileBuffer);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	return (iFileBuffer.Length() == 0 ? KErrEof : KErrNone);
+	}
+TInt CFileReader::PhysicallySeekAndRead(TInt64 aOffset)
+    {
+    TInt err;
+    // New buffer contents so read from the start of it.
+    CBufferReader::Reset();
+    
+    iFilePos = aOffset;
+    RFile64* tempfile;
+    tempfile = static_cast<RFile64*> (iFile);
+ 
+    err = tempfile->Seek(ESeekCurrent, iFilePos);
 	if (err != KErrNone)
 		{
 		return err;
--- a/mmlibs/mmfw/Recogniser/src/mpeg4parser.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/Recogniser/src/mpeg4parser.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -71,6 +71,7 @@
 #define KMPEG4VideoBit			KBit2	// 00000100
 
 static const TInt KMPEG4BoxIntroLen = 8;
+static const TInt KMPEG4Box64BitIntroLen = 16;
 
 //
 // In order to find out the type of MPEG4 file it is
@@ -284,8 +285,14 @@
 		iIsFinished = ETrue;
 		return;
 		}
-	
-	iReader.SeekL(iSize - KMPEG4BoxIntroLen);
+	if(iSizeIn32bit)
+	    {
+        iReader.SeekL(iSize - KMPEG4BoxIntroLen);
+	    }
+	else
+	    {
+        iReader.SeekL(iSize - KMPEG4Box64BitIntroLen);
+	    }
 	}
 
 
@@ -522,11 +529,13 @@
 			
 		case 1:
 			// Size is specified in a 64-bit field.
+		    iSizeIn32bit = EFalse;
 			iReader.Read64L(iSize);
 			break;
 			
 		default:
 			// It's an actual 32-bit size.
+		    iSizeIn32bit = ETrue;
 			iSize = MAKE_TINT64(0, word1);
 		}
 		
--- a/mmlibs/mmfw/Recogniser/src/parsers.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/Recogniser/src/parsers.h	Thu Sep 16 18:57:38 2010 +0100
@@ -122,6 +122,7 @@
 	TInt iBrandIndex;
 	TBool iIsFinished;
 	TInt64 iSize; 			// The current box's size.
+	TBool iSizeIn32bit;
 	CReader& iReader;
 	TFlags& iFlags;
 	TBool iVideoAssumed;
--- a/mmlibs/mmfw/Recogniser/src/reader.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/Recogniser/src/reader.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -172,6 +172,20 @@
 	return KErrNone;
 	}
 	
-
+//
+// Skips forwards or backwards aOffset number of bytes.
+//
+TInt CReader::Seek(TInt64 aOffset)
+    {
+    TInt64 newBufPos = iBufPos + aOffset;
+    
+    if ((newBufPos < 0) || (newBufPos >= iBuffer.Length()))
+        {
+        // Trying to seek past the bounds of the buffer.
+        return KErrUnderflow;
+        }
+        
+    iBufPos += aOffset;
+    return KErrNone;
+    }
 
-
--- a/mmlibs/mmfw/Recogniser/src/readers.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/Recogniser/src/readers.h	Thu Sep 16 18:57:38 2010 +0100
@@ -105,6 +105,7 @@
 	// Non-leaving Seek
 	//
 	TInt Seek(TInt aOffset);
+	TInt Seek(TInt64 aOffset);
 	
 private:
 	const TDesC8& iBuffer;		// The buffer that contains the source data.
@@ -163,10 +164,10 @@
 	// Seeks to a new file location and fills the buffer from there.
 	//
 	TInt PhysicallySeekAndRead(TInt aAmount);
-	
+	TInt PhysicallySeekAndRead(TInt64 aOffset);
 private:
 	RFile* iFile;
-	TInt iFilePos;
+	TInt64 iFilePos;
 	TBuf8<KBufSize> iFileBuffer;
 	};
 	
--- a/mmlibs/mmfw/inc/mmf/server/mmfdatapath2.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/inc/mmf/server/mmfdatapath2.h	Thu Sep 16 18:57:38 2010 +0100
@@ -135,6 +135,7 @@
 	TBool iGetTimePlayedSupported;
 	TBool iIsResumeSupported;
 	TBool iIsUsingResumeSupport;
+	TBool iPauseCalledInsilence;
 	}; 
 
 #endif
--- a/mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -1037,7 +1037,10 @@
 		}
 	else
 		{
-		iAsyncCallback->MatoPlayStarted(KErrNone);
+        if(iPlayStartObserver)
+            {
+            iAsyncCallback->MatoPlayStarted(KErrNone);
+            }
 		}
 	}
 	
@@ -1129,32 +1132,57 @@
 
 void CMMFMdaAudioToneObserverCallback::MatoPrepareComplete(TInt aError)
 	{
-	iAction = EPrepareComplete;
-	iErrorCode = aError;
-
-	TRequestStatus* s = &iStatus;
-	SetActive();
-	User::RequestComplete(s, KErrNone);
+	if(!IsActive())
+	    {
+        iAction = EPrepareComplete;
+        iErrorCode = aError;
+        
+        TRequestStatus* s = &iStatus;
+        SetActive();
+        User::RequestComplete(s, KErrNone);
+	    }
+	else
+	    {
+		// Since the default granularity is 8, failing of Append() is unusual, hence ignoring the return err.
+	    iCallBackQueue.Append(EPrepareComplete);
+	    iCallBackQueueError.Append(aError);
+	    }
 	}
 
 void CMMFMdaAudioToneObserverCallback::MatoPlayComplete(TInt aError)
 	{
-	iAction = EPlayComplete;
-	iErrorCode = aError;
-
-	TRequestStatus* s = &iStatus;
-	SetActive();
-	User::RequestComplete(s, KErrNone);
+    if(!IsActive())
+        {
+        iAction = EPlayComplete;
+        iErrorCode = aError;
+        
+        TRequestStatus* s = &iStatus;
+        SetActive();
+        User::RequestComplete(s, KErrNone);
+        }
+    else
+        {
+        iCallBackQueue.Append(EPlayComplete);
+        iCallBackQueueError.Append(aError);
+        }
 	}
 
 void CMMFMdaAudioToneObserverCallback::MatoPlayStarted(TInt aError)
 	{
-	iAction = EPlayStarted;
-	iErrorCode = aError;
-
-	TRequestStatus* s = &iStatus;
-	SetActive();
-	User::RequestComplete(s, KErrNone);
+    if(!IsActive())
+        {
+        iAction = EPlayStarted;
+        iErrorCode = aError;
+    
+        TRequestStatus* s = &iStatus;
+        SetActive();
+        User::RequestComplete(s, KErrNone);
+        }
+    else
+        {
+        iCallBackQueue.Append(EPlayStarted);
+        iCallBackQueueError.Append(aError);
+        }
 	}
 
 void CMMFMdaAudioToneObserverCallback::RunL()
@@ -1175,6 +1203,17 @@
 			iPlayStartCallback.MatoPlayStarted(iErrorCode);
 			break;
 		}
+	if(iCallBackQueue.Count() > 0 & !IsActive() )
+	    {
+        iAction = TMMFAudioToneObserverCallbackAction(iCallBackQueue[0]);
+        iCallBackQueue.Remove(0);
+        iErrorCode = iCallBackQueueError[0];
+        iCallBackQueueError.Remove(0);
+        
+        TRequestStatus* s = &iStatus;
+        User::RequestComplete(s, KErrNone);
+        SetActive();
+	    }
 	}
 
 void CMMFMdaAudioToneObserverCallback::DoCancel()
--- a/mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/src/Client/Audio/mmfclienttoneplayer.h	Thu Sep 16 18:57:38 2010 +0100
@@ -57,6 +57,8 @@
 	MMdaAudioTonePlayStartObserver& iPlayStartCallback; 
 	TMMFAudioToneObserverCallbackAction iAction;
 	TInt iErrorCode;
+	RArray <TInt> iCallBackQueue;
+	RArray <TInt> iCallBackQueueError;
 	};
 
 class CMMFToneConfig;
--- a/mmlibs/mmfw/src/Client/Utility/mmfclientutility.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/src/Client/Utility/mmfclientutility.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -2235,7 +2235,12 @@
 	}
 
 void CMMFFindAndOpenController::UseSecureDRMProcessL(TBool& aIsSecureDrmProcess)
-    {       
+    {
+    if(iHasDrmCapability)//if client has DRM capability, we never use Secure DRM Process
+        {
+        aIsSecureDrmProcess = EFalse;
+        return;
+        }       
     TBool isDataProtected = EFalse;
     ContentAccess::CContent* content = NULL;
     TControllerMode mode = iCurrentConfig->iControllerMode;
@@ -2283,72 +2288,8 @@
         User::Leave(error);
         }
 
-    if(!isDataProtected)
-        {
-        CleanupStack::PopAndDestroy(content);
-        return;//returning cause if data is not protected, we need not evaluate the type of rights.
-        }
-    
-    RArray<TAgent> agents;
-    TAgent drmAgent;
-
-    CManager* manager = CManager::NewLC();
-    CleanupClosePushL( agents );
-    manager->ListAgentsL( agents );
-    
-    for ( TInt i = 0; i < agents.Count(); i++ )
-        {
-        if ( agents[i].Name().Compare( content->Agent().Name() ) == 0 )  
-            {
-            drmAgent = agents[i];
-            break;
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( &agents );        
-    RStreamablePtrArray<CRightsInfo> infoArray;
-    CRightsManager*  rightsManager = manager->CreateRightsManagerL(drmAgent);
-    CleanupStack::PushL(rightsManager);
-    
-    if(iFileName.Length())
-        {
-        if(iUniqueId)
-            {
-            TVirtualPathPtr pathPtr(iFileName, *iUniqueId);
-            TRAP(error,rightsManager->ListRightsL(infoArray, pathPtr) );
-            }
-        else
-            {
-            TRAP(error,rightsManager->ListRightsL(infoArray, iFileName ) ); 
-            }
-        }
-    else if (iUseFileHandle && iOwnFileHandle) 
-        {
-        if(iUniqueId)
-            {
-            TRAP(error,rightsManager->ListRightsL(infoArray, iFileHandle, *iUniqueId) );
-            }
-        else
-            {
-            TRAP(error,rightsManager->ListRightsL(infoArray, iFileHandle, KNullDesC) );
-          }
-        }
-    
-    if(error)
-        {
-        infoArray.Close();
-        User::Leave(error);
-        }
-    TInt consumableRights = 0;
-    if(infoArray.Count() > 0)
-        consumableRights = (ContentAccess::ERightsTypeConsumable) &  infoArray[0]->RightsType();
-    
-    
-    CleanupStack::PopAndDestroy( rightsManager );
-    infoArray.Close();
-    CleanupStack::PopAndDestroy( manager );
     CleanupStack::PopAndDestroy(content);
-    if(isDataProtected && !iHasDrmCapability && mode == EPlayback && !consumableRights)
+    if(isDataProtected && !iHasDrmCapability && mode == EPlayback)
         {//only when the Data is protected and client does not have the DRM capability, we need secure DRM process
         aIsSecureDrmProcess = ETrue;
         }
--- a/mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -490,7 +490,14 @@
 	if (!iSourceBuffer->BufferSize() || iSourceBuffer->LastBuffer() ||
 		(((iState == EConverting) || (iState == EPlaying)) && (iPlayWindowEndPosition < iCachedSourceDuration) && ( InputPosition() >= iPlayWindowEndPosition ))) 
 		{
-		iNumberOfTimesPlayed++;
+		//When it resumes in silence , position of the buffer is in end so we need to skip the increament.
+		if(!iPauseCalledInsilence) 
+		{    
+			iNumberOfTimesPlayed++;
+		}else
+		{
+			iPauseCalledInsilence=EFalse;
+		}
 		if ((iNumberOfTimesPlayed <= iNumberOfTimesToRepeat) || iNumberOfTimesToRepeat == KMdaRepeatForever)
 			{
 			iSourceBuffer->SetLastBuffer(EFalse);
@@ -899,6 +906,10 @@
 			// should be updated, MDataSource position should be changed
 			iStartPosition = Position();
 			iIsUsingResumeSupport = ETrue;
+			if(iRepeatTrailingSilenceTimer->IsActive())
+			{   
+				iPauseCalledInsilence=ETrue;
+			}   
 			// If we wait for the sink to complete play, then we do not proceed with supplying the buffers to the sink
 			// In this case we need to reset the buffers so that InitializeSinkL won't attempt bringing in new ones
 			if (iTransferState == EWaitSink)
@@ -964,6 +975,7 @@
 		iGetTimePlayedSupported = devSound.IsGetTimePlayedSupported();
 		iIsResumeSupported = devSound.IsResumeSupported();
 		iIsUsingResumeSupport = EFalse;
+		iPauseCalledInsilence = EFalse;
 		}
 	}
 
@@ -990,7 +1002,11 @@
 
 		if(iPauseCalled) //sink and source will have been stopped, and we will not have been re-primed
 			{
-			iDataSink->SinkPrimeL(); //propagate change down to sink
+			//When pause is called silence,we need to send the buffer while resume so icansendbuffer should enabled
+			if(!iPauseCalledInsilence)
+			{
+				iDataSink->SinkPrimeL(); //propagate change down to sink
+			}
 			iPauseCalled = EFalse;
 			}
 
--- a/mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/group/tsi_mmf_vclnt_data.pkg	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/group/tsi_mmf_vclnt_data.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -17,11 +17,26 @@
 //ini
 "\epoc32\data\c\video.ini" - "c:\video.ini"
 
+// Scripts for SecureDRM
+"\epoc32\data\c\rta\rta.ini" - "c:\rta\rta.ini"
+"\epoc32\data\c\rta\rta.script" - "c:\rta.script",testexecute.exe
+"\epoc32\data\c\securedrm_video_testdata.ini" - "c:\securedrm_video_testdata.ini"
+"\epoc32\data\c\securedrm_video.ini" - "c:\securedrm_video.ini"
+"\epoc32\data\c\tsi_mmf_securedrm_video_testdata.script" - "c:\tsi_mmf_securedrm_video_testdata.script",testexecute.exe
+
 // scripts
 "\epoc32\data\c\TSI_MMF_VCLNT_WM.script" - "c:\TSI_MMF_VCLNT_WM.script"
 "\epoc32\data\c\TSI_MMF_VCLNT_OF.script" - "c:\TSI_MMF_VCLNT_OF.script"
 "\epoc32\data\c\TSI_MMF_VCLNT_OF_ALLOC.script" - "c:\TSI_MMF_VCLNT_OF_ALLOC.script"
 
+// SecureDRM test data
+"\epoc32\data\c\rta\videocontentnorights.xml" - "c:\rta\videocontentnorights.xml"
+"\epoc32\data\c\rta\videocontent.xml" - "c:\rta\videocontent.xml"
+"\epoc32\data\c\rta\videorights.xml" - "c:\rta\videorights.xml"
+"\epoc32\data\c\securedrm\videocontent2.xml" - "c:\securedrm\videocontent2.xml"
+"\epoc32\data\c\securedrm\videorights2.xml" - "c:\securedrm\videorights2.xml"
+"\epoc32\data\c\securedrm\xvidonly.avi" - "c:\securedrm\xvidonly.avi"
+
 // data files
 "\epoc32\data\c\VclntITestData\longvideo.dummy" - "c:\VclntITestData\longvideo.dummy"
 "\epoc32\data\c\VclntITestData\shortvideo.dummy" - "c:\VclntITestData\shortvideo.dummy"
--- a/mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/scripts/TSI_MMF_VCLNT_WM.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/vclnt/scripts/TSI_MMF_VCLNT_WM.script	Thu Sep 16 18:57:38 2010 +0100
@@ -30,7 +30,8 @@
 //! @SYMTestCaseID MM-MMF-VCLNT-I-0001-CP
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0001-CP   c:\video.ini
-TEST_COMPLETE 
+TEST_COMPLETE
+DELAY 5000 
 
 #Req. under test REQ172.2.4        REQ172.2.8        REQ172.2.10
 # Play video descriptor
@@ -38,6 +39,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0002-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.28      
 # Set and enquire framerate
@@ -45,6 +47,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0010-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.13          REQ172.2.14
 # set position and play form this position.
@@ -52,6 +55,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0011-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.25
 # Video priority 
@@ -59,6 +63,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0012-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.25
 # Enquire video duration
@@ -66,7 +71,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0015-HP   c:\video.ini
 TEST_COMPLETE 
-
+DELAY 5000
 
 #Req. under test REQ172.2.16        REQ172.2.17        REQ172.2.18
 # Set the volume to the maximum.
@@ -74,6 +79,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0016-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.4        REQ172.2.5       REQ172.2.6
 # Open a clip, close the clip and open a new clip.
@@ -81,6 +87,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0017-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 
 #Req. under test REQ172.2.10            REQ172.2.11
@@ -89,7 +96,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0018-HP   c:\video.ini
 TEST_COMPLETE 
-
+DELAY 5000
 
 #Req. under test REQ172.2.30        REQ172.2.31
 # Set and Enquire balance
@@ -97,6 +104,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0019-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.21          REQ172.2.22
 # Set the play window, delete the play window.
@@ -104,6 +112,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0020-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 
 #Req. under test REQ172.2.20
@@ -112,6 +121,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0021-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 
 #Req. under test REQ172.2.27
@@ -120,7 +130,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0022-HP   c:\video.ini
 TEST_COMPLETE 
-
+DELAY 5000
 
 #Req. under test REQ172.2.23
 # Set number of time to repeat play
@@ -128,6 +138,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0023-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. not mapped
 # Query the MIME type
@@ -135,6 +146,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0031-LP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. not mapped
 # Register for rebuffering
@@ -142,6 +154,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0032-LP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 ###################### NEGATIVE TEST ###############
 
@@ -151,6 +164,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1001-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.28
 # Set invalid framerate
@@ -158,6 +172,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1002-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.13          REQ172.2.14
 # Set invalid video position and play (above maximum).
@@ -165,6 +180,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1003-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.13          REQ172.2.14
 # Set invalid video position and play (below minimum).
@@ -172,6 +188,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1004-CP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.16        REQ172.2.17        REQ172.2.18
 # Set invalid volume.
@@ -179,6 +196,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1005-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.16        REQ172.2.17        REQ172.2.18
 # Set invalid volume.
@@ -186,6 +204,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1010-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.30        REQ172.2.31
 # Set invalid balance
@@ -193,6 +212,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1006-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.30        REQ172.2.31
 # Set invalid balance
@@ -200,6 +220,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1011-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.21          REQ172.2.22
 # Set invalid play window.
@@ -207,6 +228,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1007-HP   c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.2.4           REQ172.2.7        REQ172.2.10
 # Load corrupted file.
@@ -231,6 +253,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0502-CP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.3              REQ172.16.7           REQ172.16.9
 # Open descriptor based clip and record.
@@ -238,6 +261,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0503-CP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.3       REQ172.16.8
 # Open URL-based clip.
@@ -245,6 +269,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0504-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.3       REQ172.16.6      REQ172.16.4    REQ172.16.5
 # Open file-based clip. Close the clip and then open the clip again.
@@ -252,6 +277,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0505-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.11         REQ172.16.9
 # Configure the recorded file and record.
@@ -259,6 +285,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0506-CP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.9           REQ172.16.10
 # Start recording then stop on request.
@@ -266,6 +293,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0507-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.14
 # Check duration
@@ -273,6 +301,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0509-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.15
 # Query record time
@@ -280,6 +309,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0510-HP c:\video.ini
 TEST_COMPLETE
+DELAY 5000
 
 #Req. under test REQ172.16.16
 # Crop clip
@@ -287,6 +317,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0511-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.17      REQ172.16.18       REQ172.16.19
 # Set gain to maximum and enquire.
@@ -294,6 +325,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0512-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.20
 # Set meta-information.
@@ -301,6 +333,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0513-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.22
 # Set priority
@@ -308,6 +341,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0514-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.23              REQ172.16.24
 # Set balance and enquire the balance.
@@ -315,6 +349,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0515-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.26
 # Specify maximum clip size in bytes.
@@ -322,6 +357,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0516-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. not mapped
 # Set / get audio / video types.
@@ -329,6 +365,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-0521-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 ###################### NEGATIVE TEST ###############
 
@@ -338,6 +375,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1501-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.11         REQ172.16.9
 # Record utility - Delete object before record operation has completed.
@@ -345,6 +383,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1502-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.17     REQ172.16.18      REQ172.16.19
 # set gain to invalid gain value (above maximum)
@@ -352,6 +391,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1503-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.17     REQ172.16.18      REQ172.16.19
 # set gain to invalid gain value (below minimum)
@@ -359,6 +399,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1504-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.23              REQ172.16.24
 # Set invalid balance (above maximum)
@@ -366,6 +407,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1507-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.23              REQ172.16.24
 # Set invalid balance (below minimum).
@@ -373,6 +415,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1508-HP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ172.16.26
 # Set invalid maximum length of file in bytes and record
@@ -380,6 +423,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1510-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ1952
 # get Frame from unprotected video file:c:\VclntITestData\LongVideo.avi
@@ -387,6 +431,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1600-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ1952
 # Get a frame from a DRM protected file
@@ -394,6 +439,7 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1601-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ1952
 # Open DRM protected file with no rights set
@@ -401,10 +447,13 @@
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1602-LP c:\video.ini
 TEST_COMPLETE 
+DELAY 5000
 
 #Req. under test REQ1952
 # Open DRM protected video and play MIME type provide by Agent
 //! @SYMTestCaseID MM-MMF-VCLNT-I-1603-LP
 
 RUN_TEST_STEP -1, VCLNT, MM-MMF-VCLNT-I-1603-LP c:\video.ini
-TEST_COMPLETE 
\ No newline at end of file
+TEST_COMPLETE 
+DELAY 5000
+
--- a/mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/group/tsi_mmf_vclntavi_data.pkg	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/group/tsi_mmf_vclntavi_data.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -18,6 +18,14 @@
 "\epoc32\data\c\vclntavi\video_avi.ini" - "c:\vclntavi\video_avi.ini"
 "\epoc32\data\c\vclntavi\video_avi_bc.ini" - "c:\vclntavi\video_avi_bc.ini"
 
+// Scripts for SecureDRM
+"\epoc32\data\c\rta\rta.ini" - "c:\rta\rta.ini"
+"\epoc32\data\c\rta\rta.script" - "c:\rta.script",testexecute.exe
+"\epoc32\data\c\securedrm_video_testdata.ini" - "c:\securedrm_video_testdata.ini"
+"\epoc32\data\c\securedrm_video.ini" - "c:\securedrm_video.ini"
+"\epoc32\data\c\tsi_mmf_securedrm_video_testdata.script" - "c:\tsi_mmf_securedrm_video_testdata.script",testexecute.exe
+"\epoc32\data\c\tsi_mmf_securedrm_video_mmddcap.script" - "c:\tsi_mmf_securedrm_video_mmddcap.script"
+
 //scripts
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_play.script" - "c:\tsi_mmf_vclntavi_play.script"
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_rec.script" - "c:\tsi_mmf_vclntavi_rec.script"
@@ -31,8 +39,8 @@
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_apr.script" - "c:\tsi_mmf_vclntavi_apr.script"
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_apr_alloc.script" - "c:\tsi_mmf_vclntavi_apr_alloc.script"
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_play_secdisp.script" - "c:\tsi_mmf_vclntavi_play_secdisp.script"
+"\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_dummy_controller.script" - "c:\tsi_mmf_vclntavi_dummy_controller.script"
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_par_audio.script" - "c:\tsi_mmf_vclntavi_par_audio.script"
-"\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_dummy_controller.script" - "c:\tsi_mmf_vclntavi_dummy_controller.script"
 
 // Graphics surface tests
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_surf.script" - "c:\tsi_mmf_vclntavi_surf.script"
@@ -52,13 +60,10 @@
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_subtitles_urel.script" - "c:\tsi_mmf_vclntavi_subtitles_urel.script"
 "\epoc32\data\c\vclntavi\tsi_mmf_vclntavi_subtitles_alloc.script" - "c:\tsi_mmf_vclntavi_subtitles_alloc.script"
 
-// Scripts for SecureDRM
-"\epoc32\data\c\securedrm_video_testdata.ini" - "c:\securedrm_video_testdata.ini"
-"\epoc32\data\c\securedrm_video.ini" - "c:\securedrm_video.ini"
-"\epoc32\data\c\tsi_mmf_securedrm_video_testdata.script" - "c:\tsi_mmf_securedrm_video_testdata.script"
-"\epoc32\data\c\tsi_mmf_securedrm_video_mmddcap.script" - "c:\tsi_mmf_securedrm_video_mmddcap.script"
-
 // SecureDRM test data
+"\epoc32\data\c\rta\videocontentnorights.xml" - "c:\rta\videocontentnorights.xml"
+"\epoc32\data\c\rta\videocontent.xml" - "c:\rta\videocontent.xml"
+"\epoc32\data\c\rta\videorights.xml" - "c:\rta\videorights.xml"
 "\epoc32\data\c\securedrm\videocontent2.xml" - "c:\securedrm\videocontent2.xml"
 "\epoc32\data\c\securedrm\videorights2.xml" - "c:\securedrm\videorights2.xml"
 "\epoc32\data\c\securedrm\xvidonly.avi" - "c:\securedrm\xvidonly.avi"
@@ -83,3 +88,7 @@
 "\epoc32\data\c\vclntavi\xvid_subtitle_corrupt.srt"-"c:\vclntavi\xvid_subtitle_corrupt.srt"
 "\epoc32\data\c\vclntavi\xvid_subtitle.avi"-"c:\vclntavi\xvid_subtitle.avi"
 "\epoc32\data\c\vclntavi\xvid_subtitle.srt"-"c:\vclntavi\xvid_subtitle.srt"
+
+//record tests require txt file for testcameraapp
+"\epoc32\data\c\102070CC.txt"-"c:\102070CC.txt"
+
--- a/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/TSU_MMF_VCLNT_01/src/TestStepAllocFailVidPlayer.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/TSU_MMF_VCLNT_01/src/TestStepAllocFailVidPlayer.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-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"
@@ -230,6 +230,7 @@
 		__UHEAP_SETFAIL(RHeap::ENone ,0);
 
 		DeInitWserv();
+		User::After(2000000);
 
 		if (completed)
 			{
--- a/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/group/tsu_mmf_vclnt_data.pkg	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/group/tsu_mmf_vclnt_data.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -18,6 +18,13 @@
 "\epoc32\data\c\mm\TSU_MMF_VCLNT_01.ini" - "c:\mm\TSU_MMF_VCLNT_01.ini"
 "\epoc32\data\c\mm\TSU_MMF_VCLNT_01_gce_unavailable.ini" - "c:\mm\TSU_MMF_VCLNT_01_gce_unavailable.ini"
 
+// Scripts for SecureDRM
+"\epoc32\data\c\rta\rta.ini" - "c:\rta\rta.ini"
+"\epoc32\data\c\rta\rta.script" - "c:\rta.script",testexecute.exe
+"\epoc32\data\c\securedrm_video_testdata.ini" - "c:\securedrm_video_testdata.ini"
+"\epoc32\data\c\securedrm_video.ini" - "c:\securedrm_video.ini"
+"\epoc32\data\c\tsi_mmf_securedrm_video_testdata.script" - "c:\tsi_mmf_securedrm_video_testdata.script",testexecute.exe
+
 "\epoc32\data\c\mm\TSU_MMF_VCLNT_01_WM_CAF_V2.script" - "c:\TSU_MMF_VCLNT_01_WM_CAF_V2.script"
 "\epoc32\data\c\mm\TSU_MMF_VCLNT_01_WM_CAF_V2_priority.script" - "c:\TSU_MMF_VCLNT_01_WM_CAF_V2_priority.script"
 "\epoc32\data\c\mm\TSU_MMF_VCLNT_01_Alloc_WM.script" - "c:\TSU_MMF_VCLNT_01_Alloc_WM.script"
@@ -40,17 +47,21 @@
 // For winscw use only
 // "\epoc32\data\c\mm\TSU_MMF_vclnt_u_01_subtitle_gce_on_urel.script" - "c:\TSU_MMF_vclnt_u_01_subtitle_gce_on_urel.script"
 
+// SecureDRM test data
+"\epoc32\data\c\rta\videocontentnorights.xml" - "c:\rta\videocontentnorights.xml"
+"\epoc32\data\c\rta\videocontent.xml" - "c:\rta\videocontent.xml"
+"\epoc32\data\c\rta\videorights.xml" - "c:\rta\videorights.xml"
+"\epoc32\data\c\securedrm\videocontent2.xml" - "c:\securedrm\videocontent2.xml"
+"\epoc32\data\c\securedrm\videorights2.xml" - "c:\securedrm\videorights2.xml"
+"\epoc32\data\c\securedrm\xvidonly.avi" - "c:\securedrm\xvidonly.avi"
+
 // data files
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\small2.wav" - "c:\mm\mmf\testfiles\vclnt\small2.wav"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\smallv.wav" - "c:\mm\mmf\testfiles\vclnt\smallv.wav"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\clock.dummy" - "c:\mm\mmf\testfiles\vclnt\clock.dummy"
-"\epoc32\data\c\mm\mmf\testfiles\vclnt\Video.content" - "c:\mm\mmf\testfiles\vclnt\Video.content"
-"\epoc32\data\c\mm\mmf\testfiles\vclnt\VideoContentNoRights.content" - "c:\mm\mmf\testfiles\vclnt\VideoContentNoRights.content"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\LongVideo.dummy" - "c:\mm\mmf\testfiles\vclnt\LongVideo.dummy"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\ShortVideo.dummy" - "c:\mm\mmf\testfiles\vclnt\ShortVideo.dummy"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\AudVid.avi" - "c:\mm\mmf\testfiles\vclnt\AudVid.avi"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\Vid.avi" - "c:\mm\mmf\testfiles\vclnt\Vid.avi"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\xvidonly.avi" - "c:\mm\mmf\testfiles\vclnt\xvidonly.avi"
 "\epoc32\data\c\mm\mmf\testfiles\vclnt\clock2.dummy" - "c:\mm\mmf\testfiles\vclnt\clock2.dummy"
-
-
--- a/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_ALLOC_WM.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_ALLOC_WM.script	Thu Sep 16 18:57:38 2010 +0100
@@ -32,8 +32,8 @@
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0100-CP
 
-RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0100-CP
-TEST_COMPLETE 
+//RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0100-CP
+//TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0101-CP
 DELAY 5000
@@ -46,19 +46,19 @@
 TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0103-CP
-DELAY 5000
-RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0103-CP
-TEST_COMPLETE 
+//DELAY 5000
+//RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0103-CP
+//TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0300-CP
-DELAY 5000
-RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0300-CP
-TEST_COMPLETE 
+//DELAY 5000
+//RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0300-CP
+//TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0301-CP
-DELAY 5000
-RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0301-CP
-TEST_COMPLETE 
+//DELAY 5000
+//RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0301-CP
+//TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0304-CP
 DELAY 5000
--- a/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_WM_CAF_V2.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_01_WM_CAF_V2.script	Thu Sep 16 18:57:38 2010 +0100
@@ -170,9 +170,10 @@
 TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0050-LP
-DELAY 5000
-RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0050-LP
-TEST_COMPLETE 
+// This test is commented out as it has Techview dependencies
+//DELAY 5000
+//RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0050-LP
+//TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0051-LP
 DELAY 5000
--- a/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_DRM_ALLOC.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmfunittest/VCLNT/scripts/TSU_MMF_VCLNT_DRM_ALLOC.script	Thu Sep 16 18:57:38 2010 +0100
@@ -29,6 +29,6 @@
 TEST_COMPLETE 
 
 //! @SYMTestCaseID MM-MMF-VCLNT-U-0506-HP
-
+DELAY 5000
 RUN_TEST_STEP -1, TSU_MMF_VCLNT_01, MM-MMF-VCLNT-U-0506-HP C:\MM\TSU_MMF_VCLNT_01.ini
 TEST_COMPLETE 
--- a/mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/group/tsi_mvs_agents_data.pkg	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/group/tsi_mvs_agents_data.pkg	Thu Sep 16 18:57:38 2010 +0100
@@ -18,18 +18,18 @@
 "\epoc32\data\c\mvs\tsi_mvs_agents.ini" - "c:\mvs\tsi_mvs_agents.ini"
 
 //scripts
-"\epoc32\data\c\mvs\tsi_mvs_audioagent.script" - "c:\tsi_mvs_audioagent.script"
-"\epoc32\data\c\mvs\tsi_mvs_audioagent_alloc.script" - "c:\tsi_mvs_audioagent_alloc.script"
+;"\epoc32\data\c\mvs\tsi_mvs_audioagent.script" - "c:\tsi_mvs_audioagent.script"
+;"\epoc32\data\c\mvs\tsi_mvs_audioagent_alloc.script" - "c:\tsi_mvs_audioagent_alloc.script"
 "\epoc32\data\c\mvs\tsi_mvs_videoagent.script" - "c:\tsi_mvs_videoagent.script"
+"\epoc32\data\c\mvs\tsi_mvs_agents_bc.ini" - "c:\mvs\tsi_mvs_agents_bc.ini"
 "\epoc32\data\c\mvs\tsi_mvs_videoagent_alloc.script" - "c:\tsi_mvs_videoagent_alloc.script"
-"\epoc32\data\c\mvs\tsi_mvs_plugin.script" - "c:\tsi_mvs_plugin.script"
+;"\epoc32\data\c\mvs\tsi_mvs_plugin.script" - "c:\tsi_mvs_plugin.script"
 "\epoc32\data\c\mvs\tsi_mvs_videoagent_secdisp.script" - "c:\tsi_mvs_videoagent_secdisp.script"
 "\epoc32\data\c\mvs\tsi_mvs_videoagent_apr.script" - "c:\tsi_mvs_videoagent_apr.script"
 
 // Graphics surface tests
 "\epoc32\data\c\mvs\tsi_mvs_videoagent_surf.script" - "c:\tsi_mvs_videoagent_surf.script"
 "\epoc32\data\c\mvs\tsi_mvs_videoagent_surf_bc.script" - "c:\tsi_mvs_videoagent_surf_bc.script"
-"\epoc32\data\c\mvs\tsi_mvs_agents_bc.ini" - "c:\mvs\tsi_mvs_agents_bc.ini"
 
 // test data files
 "\epoc32\data\c\mvs\aud_vid.avi" - "c:\mvs\aud_vid.avi"
@@ -47,3 +47,4 @@
 "\epoc32\data\c\mvs\textfile.ogg" - "c:\mvs\textfile.ogg"
 "\epoc32\data\c\mvs\wavtest01.wav" - "c:\mvs\wavtest01.wav"
 "\epoc32\data\c\mvs\wavtest02.wav" - "c:\mvs\wavtest02.wav"
+"..\..\..\mmfcharacterisationvalidation\data\mainTst.wav" - "c:\AclntITestData\mainTst.wav"
--- a/mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/scripts/tsi_mvs_videoagent.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mvsintegrationtest/scripts/tsi_mvs_videoagent.script	Thu Sep 16 18:57:38 2010 +0100
@@ -35,8 +35,8 @@
 //!@SYMTestActions            1. Open an AVI (Xvid) file. 2. Set position 3. Play 4. Pause after 1 second, check if KErrNotSupported is returned. 5. Get
 //! Position 6. Set to some other position (before the current position) 7. Play till end.
 //!@SYMTestExpectedResults    Video file, opened and played successfully, without any errors
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0001-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0001-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0002-HP
@@ -47,8 +47,8 @@
 //!@SYMTestActions            1. Open an AVI (Xvid) file, without giving the Video Controller UID. 2. Set Rotation 3. Play 4. Set Rotation 5. Get the
 //! rotation value and check 6. Stop Playback. 6. Play again till end.
 //!@SYMTestExpectedResults    Video file, opened and played successfully, without any errors
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0002-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0002-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0003-HP
@@ -84,8 +84,8 @@
 //! rate 5. Set Audio Enabled 6. Set Video / Audio Type 7. Record, Stop after 5 seconds. 8. Play using play agent 9. After Playing, get the various settings
 //! and compare with the actuals.
 //!@SYMTestExpectedResults    Record completes with KErrNone. The recorded file is played and all callbacks received
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0005-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0005-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0006-HP
@@ -120,8 +120,8 @@
 //!@SYMTestActions            1. Empty the contents of the log file 2. Create a new AVI File 3. Record for 2 seconds 4. Compare the log file with the
 //! reference log file.
 //!@SYMTestExpectedResults    The Log file is checked for modification dates, and the existance of a sample string.
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0010-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0010-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0011-HP
@@ -132,8 +132,8 @@
 //!@SYMTestActions            1. Empty the contents of the log file 2. Open the recorded AVI File 3. Play using the Video Play Agent 4. Compare the log
 //! file with the reference log file.
 //!@SYMTestExpectedResults    The Log file is checked for modification dates, and the existance of a sample string.
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0011-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0011-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0021-HP
@@ -142,8 +142,8 @@
 //!@SYMTestPriority           2
 //!@SYMTestActions            1. Open the AVI File 2. Set & get the crop region 3. Play using the Video Play Agent 
 //!@SYMTestExpectedResults    The video plays with the newly set crop region
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0021-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0021-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 //////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////// VIDEO CLIENT AGENTS :: Negative Testing ////////////////////////
@@ -168,8 +168,8 @@
 //!@SYMTestPriority           2
 //!@SYMTestActions            Attempt to load and initilise a file that has an unsupported codec.
 //!@SYMTestExpectedResults    Any of the predefined error codes.
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0013-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0013-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0014-HP
@@ -179,8 +179,8 @@
 //!@SYMTestPriority           2
 //!@SYMTestActions            Attempt to load a file containing text data without giving the controller UID
 //!@SYMTestExpectedResults    Invalid File.
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0014-HP \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0014-HP \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
 
 // 
 //!@SYMTestCaseID             MM-MVS-VIDEOAGENT-I-0015-HP
@@ -211,5 +211,5 @@
 //!@SYMTestActions            1. Open an AVI (Xvid) file. 2. Record                                           3. Pause after 1 second, check if KErrNone
 //! is returned. 4. Start Recording again.               5. Record till end.
 //!@SYMTestExpectedResults    Video file, opened and recorded successfully, without any errors
-RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0017 \mvs\tsi_mvs_agents.ini
-TEST_COMPLETE 
+//RUN_TEST_STEP 600000 TSI_MVS_AGENTS MM-MVS-VIDEOAGENT-I-0017 \mvs\tsi_mvs_agents.ini
+//TEST_COMPLETE 
--- a/mmplugins/lib3gp/impl/inc/filewriter.h	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gp/impl/inc/filewriter.h	Thu Sep 16 18:57:38 2010 +0100
@@ -21,10 +21,10 @@
 #include "mp4atom.h"
 
 // CONSTANTS
-const TInt KFileWriterBufferSizeSmall = 2048;
-const TInt KFileWriterBufferSizeLarge = (2*65536);  
-const TInt KFileWriterSoftBufLimit = 10;
-const TInt KFileWriterHardBufLimit = 15;
+const TInt KFileWriterBufferSizeSmall = 65536;
+const TInt KFileWriterBufferSizeLarge = (4*65536);  
+const TInt KFileWriterSoftBufLimit = 12;
+const TInt KFileWriterHardBufLimit = 16;
 const TInt KFileWriterMinBufferCount = 4; // shouldn't be less than 4
 
 // FORWARD DECLARATIONS
@@ -50,7 +50,7 @@
         /**
         * Two-phased constructor.
         */
-        static CFileWriter* NewL( RFile64& aFile );
+        static CFileWriter* NewL( RFile64& aFile, TInt aInitSetSize = 0, TInt aOutputBufferSizeSmall = KFileWriterBufferSizeSmall, TInt aOutputBufferSizeLarge = KFileWriterBufferSizeLarge );
 
         /**
         * Destructor.
@@ -89,7 +89,12 @@
         * @since 3.0
         * @param aHandle MP4Handle.
         */
-        void SetOutputBufferCount( MP4Handle aHandle );        
+        void SetOutputBufferCount( MP4Handle aHandle ); 
+
+        inline TInt64 OutputFileSize() const
+			{
+			return iOutputFileSize;
+			}    
 
     protected: // Functions from base classes
         
@@ -108,7 +113,7 @@
         /**
         * C++ default constructor.
         */
-        CFileWriter();
+        CFileWriter( TInt aInitSetSize, TInt aOutputBufferSizeSmall, TInt aOutputBufferSizeLarge );
 
         /**
         * By default Symbian 2nd phase constructor is private.
@@ -128,6 +133,12 @@
         * @since 2.6
         */
         void AllocateBuffersL();
+		
+		/**
+		* Updates output file size and reserves extra space for following writing if iSetSize is set.
+		* Takes into account if the position in the file was changed.
+		*/
+        void UpdateOutputFileSize();
 
 private:
         // Whether we are flushing after async write.
@@ -139,16 +150,24 @@
         // Flag whether init has been done
         TBool iMemReadyForWriting;
 
-		// Write error code.
-	    TInt iError;
+        // Write error code.
+        TInt iError;
+        
+        // Current set file size
+        TInt64 iSetSize;
+        // Current output file size
+	    TInt64 iOutputFileSize;		
+
+        TInt iOutputBufferSizeSmall;
+        TInt iOutputBufferSizeLarge;
+        
         // Output buffer size.
         TInt iOutputBufferSize;
         // Hard limit for max output buffers
         TInt iMaxOutputBufHardLimit;
         // Soft limit for max output buffers
         TInt iMaxOutputBufSoftLimit;
-        // Current output file size
-		TInt64 iOutputFileSize;
+
 
         // Output file for writes.
         RFile64* iOutputFile;
--- a/mmplugins/lib3gp/impl/src/file.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gp/impl/src/file.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -185,9 +185,77 @@
     return -1;
   }
 
+  TBuf8<16> buf;
+  buf.Copy(fp.Drive());
+  buf.LowerCase();
+  TInt drvNum = (*buf.Ptr()) - 'a';
+  PRINT((_L("drvNum = %d"), drvNum));
+  
+  TVolumeInfo volInfo;
+  error = fs->Volume(volInfo, drvNum);
+  if (error != KErrNone) 
+      {
+      return -1;
+      }
+  
+  PRINT((_L("volInfo.iFree = %Ld"), volInfo.iFree));
+  PRINT((_L("volInfo.iSize = %Ld"), volInfo.iSize));    
+
+  TVolumeIOParamInfo ioInfo;
+  error = fs->VolumeIOParam(drvNum, ioInfo);
+  if (error != KErrNone) 
+      {
+      return -1;
+      }
+  
+  PRINT((_L("ioInfo.iBlockSize = %d"), ioInfo.iBlockSize));
+  PRINT((_L("ioInfo.iClusterSize = %d"), ioInfo.iClusterSize));
+  
+  if (ioInfo.iClusterSize <= 0 || (ioInfo.iClusterSize & 0x1)) // if for some reason we got wrong value for the cluster - ignore it 
+     {
+     PRINT(_L("Wrong cluster size, set 0x8000"));
+     ioInfo.iClusterSize = 0x8000;
+     }
+  
+  // We want to have size of writing buffer to be a multiple of cluster size. Small buffer should be 1 cluster, large buffer should be 8 clusters.
+  TInt writeBufferSizeSmall = ioInfo.iClusterSize;
+  TInt writeBufferSizeLarge = ioInfo.iClusterSize * 8;
+  
+  // Now need to make sure that writeBufferSizeLarge is not too small (<128K) or too big (>256K) whilst keeping it a multiple of cluster size
+  if (writeBufferSizeLarge < KFileWriterBufferSizeLarge/2)
+      {
+      writeBufferSizeLarge = KFileWriterBufferSizeLarge/2;
+      }
+    
+  if (writeBufferSizeLarge > KFileWriterBufferSizeLarge)
+	  {
+	  writeBufferSizeLarge = (KFileWriterBufferSizeLarge / ioInfo.iClusterSize) * ioInfo.iClusterSize;
+  	  }
+
+  if (writeBufferSizeLarge < ioInfo.iClusterSize) 
+      {
+      writeBufferSizeLarge = ioInfo.iClusterSize;
+      }
+    
+  PRINT((_L("writeBufferSizeLarge = %d"), writeBufferSizeLarge));
+
+  TInt incSetSize = writeBufferSizeLarge * (KFileWriterHardBufLimit >> 1); // 2Mb if cluster size if 32767
+  TInt initSetSize = incSetSize * 1; // set initial set size for 2Mb
+  
+  if (initSetSize > volInfo.iFree) 
+      {
+      initSetSize = (volInfo.iFree / incSetSize) * incSetSize;
+      }
+
+  PRINT((_L("initSetSize = %d"), initSetSize));
+    
+  PRINT((_L("e_SetSize 1")));  
+  file->SetSize(initSetSize);
+  PRINT((_L("e_SetSize 0")));  
+
   handle->file = handle->rfile;
 
-  TRAP(error, handle->filewriter = CFileWriter::NewL( *file ));
+  TRAP(error, handle->filewriter = CFileWriter::NewL( *file, initSetSize, writeBufferSizeSmall, writeBufferSizeLarge));
   if ( error != KErrNone )
   {
     return -1;    
@@ -266,7 +334,11 @@
       PRINT((_L("e_closefile_flush_filewriter 1")));        
       (handle->filewriter)->Flush(KNullDesC8);
       PRINT((_L("e_closefile_flush_filewriter 0")));        
-      delete handle->filewriter;
+      PRINT((_L("e_SetSize 1")));  
+      ((RFile64 *)(handle->file))->SetSize((handle->filewriter)->OutputFileSize());
+      PRINT((_L("e_SetSize 0: iOutputFileSize = %Ld"), (handle->filewriter)->OutputFileSize()));  
+	  
+	  delete handle->filewriter;
       handle->filewriter = NULL;
     }
   }
@@ -1316,26 +1388,54 @@
   TFileName path;
   TInt error;
 
-  // Create a directory for the files
-  if ( handle->fileName )
-    {
-    filename = (TText *)handle->fileName;
+  TDriveList driveList;
+  TBool pathSet = EFalse;
+  
+  // As ram drive access is faster, try to set temp file directory to available ram drive.
+  if (((RFs *)(handle->fs))->DriveList(driveList) == KErrNone)
+	{
+	for ( TInt i = 0; i < driveList.Length(); i++ )
+		{
+		TDriveInfo driveInfo;
+		if (((RFs *)(handle->fs))->Drive(driveInfo, i) == KErrNone)
+			{
+			if (driveInfo.iType == EMediaRam)
+				{
+				TChar driveLetter;
+				((RFs *)(handle->fs))->DriveToChar(i, driveLetter);
+				path.Append(driveLetter);
+				path.Append(_L(":"));
+				path.Append(KTmpDirectoryName);
+				pathSet = ETrue;
+				break;
+				}
+			}
+		}
+	}
+	  
+  // If no ram drive was found create a directory for the files on current drive
+  if (!pathSet)
+	{
+	if ( handle->fileName )
+		{
+		filename = (TText *)handle->fileName;
     
-    TParse fp;
-    path = KTmpDirectoryName;
-    if (((RFs *)(handle->fs))->Parse(filename, fp) != KErrNone)
-        return -1;
-    path.Insert(0, fp.Drive());
-    }
-  else
-    {
-    TChar drive;
-    if (((RFs *)(handle->fs))->DriveToChar(handle->fileHandleDrive, drive ) != KErrNone )
-        return -1;
-    path.Append( drive );
-    path.Append( _L(":") );
-    path.Append( KTmpDirectoryName );
-    }
+		TParse fp;
+		path = KTmpDirectoryName;
+		if (((RFs *)(handle->fs))->Parse(filename, fp) != KErrNone)
+			return -1;
+		path.Insert(0, fp.Drive());
+		}
+	else
+		{
+		TChar drive;
+		if (((RFs *)(handle->fs))->DriveToChar(handle->fileHandleDrive, drive ) != KErrNone )
+			return -1;
+		path.Append( drive );
+		path.Append( _L(":") );
+		path.Append( KTmpDirectoryName );
+		}
+	}
     
   // Try to delete the temp folder from leftovers
   // If other instance is using it then delete will just fail
--- a/mmplugins/lib3gp/impl/src/filewriter.cpp	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gp/impl/src/filewriter.cpp	Thu Sep 16 18:57:38 2010 +0100
@@ -38,7 +38,11 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CFileWriter::CFileWriter() : CActive( EPriorityHigh ) 
+CFileWriter::CFileWriter( TInt aInitSetSize, TInt aOutputBufferSizeSmall, TInt aOutputBufferSizeLarge ):
+	CActive( EPriorityHigh ),
+	iSetSize( aInitSetSize ),
+	iOutputBufferSizeSmall( aOutputBufferSizeSmall ),
+	iOutputBufferSizeLarge( aOutputBufferSizeLarge )
     {
     }
 
@@ -52,6 +56,7 @@
     PRINT((_L("CFileWriter::ConstructL() in")));         
     iFlush = EFalse;
     iError = KErrNone;
+
     iOutputFile = &aFile;
     iWritingStarted = EFalse;
     iOutputBufferSize = KFileWriterBufferSizeSmall;
@@ -73,9 +78,9 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CFileWriter* CFileWriter::NewL( RFile64& aFile )
+CFileWriter* CFileWriter::NewL( RFile64& aFile, TInt aInitSetSize, TInt aOutputBufferSizeSmall, TInt aOutputBufferSizeLarge )
     {
-    CFileWriter* self = new(ELeave) CFileWriter;
+    CFileWriter* self = new(ELeave) CFileWriter( aInitSetSize, aOutputBufferSizeSmall, aOutputBufferSizeLarge );
     CleanupStack::PushL(self);
     self->ConstructL( aFile );
     CleanupStack::Pop(self);
@@ -111,6 +116,37 @@
     PRINT((_L("CFileWriter::~CFileWriter() out")));         
     }
 
+// -----------------------------------------------------------------------------
+// CFileWriter::UpdateOutputFileSize()
+// Updates output file size and reserves extra space for following writing 
+// if iSetSize is set.  
+// Takes into account if the position in the file was changed.
+// -----------------------------------------------------------------------------
+//
+void CFileWriter::UpdateOutputFileSize()
+    {
+    TInt64 pos = 0;
+    PRINT((_L("e_cfilewriter_write_updateoutputfilesize_seek 1")));
+    iOutputFile->Seek(ESeekCurrent, pos);
+    PRINT((_L("e_cfilewriter_write_updateoutputfilesize_seek 0")));
+    
+    PRINT((_L("CFileWriter::UpdateOutputFileSize() pos: %Ld"), pos));
+    PRINT((_L("CFileWriter::UpdateOutputFileSize() iOutputFileSize: %Ld"), iOutputFileSize));
+    PRINT((_L("CFileWriter::UpdateOutputFileSize() iSetSize: %Ld"), iSetSize));
+    
+    if (pos > iOutputFileSize) 
+        {
+        iOutputFileSize = pos;
+        }
+    
+    while (iOutputFileSize >= iSetSize) 
+        {
+        iSetSize += static_cast<TInt64>(iOutputBufferSize) * (static_cast<TInt64>(iMaxOutputBufHardLimit) >> 1); 
+        PRINT((_L("e_cfilewriter_updateoutputfilesize_setsize 1")));                     
+        iOutputFile->SetSize( iSetSize );
+        PRINT((_L("e_cfilewriter_updateoutputfilesize_setsize 0")));                     
+        }
+    }
 
 // -----------------------------------------------------------------------------
 // CFileWriter::Write( const TDesC8& aBuf )
@@ -233,6 +269,7 @@
         PRINT((_L("e_cfilewriter_flush_remove_buf 1")));
         if ( error == KErrNone )
             {
+            UpdateOutputFileSize();
             iFullBufferQueue[0]->Des().Zero();
             if ( iEmptyBufferQueue.Append( iFullBufferQueue[0] ) )
                 {
@@ -257,6 +294,7 @@
         PRINT((_L("e_cfilewriter_flush_writeinput_sync 0")));
         if ( error == KErrNone )
             {
+            UpdateOutputFileSize();
             iInputBuf->Des().Zero();
             }
         else
@@ -293,11 +331,11 @@
 
     if ( aBufferSize == EBufferSizeSmall ) 
         {
-        size = KFileWriterBufferSizeSmall;
+        size = iOutputBufferSizeSmall;
         }
     else if ( aBufferSize == EBufferSizeLarge ) 
         {
-        size = KFileWriterBufferSizeLarge;
+        size = iOutputBufferSizeLarge;
         }
     else if ( aBufferSize == EBufferSizeCustom )
         {
@@ -373,7 +411,7 @@
 
     while (byteswritten < aBuf.Length() )
         {
-        available = (iInputBuf->Des()).MaxLength() - iInputBuf->Length();
+        available = iOutputBufferSize - iInputBuf->Length();
 
         if (available > 0)
             {
@@ -468,7 +506,7 @@
 
     if ( iStatus == KErrNone )
         {
-        iOutputFileSize += iFullBufferQueue[0]->Des().Length();
+        UpdateOutputFileSize();                    
         iFullBufferQueue[0]->Des().Zero();
         iError = iEmptyBufferQueue.Append( iFullBufferQueue[0] );
         if ( iError )
@@ -487,7 +525,7 @@
         return;
         }
 
-    PRINT((_L("CFileWriter::RunL() Buffer written, Status: Full:%d Empty:%d Filesize:%d"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
+    PRINT((_L("CFileWriter::RunL() Buffer written, Status: Full:%d Empty:%d Filesize:%Ld"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
     
     if ( iFlush )
         {
@@ -505,7 +543,7 @@
             PRINT((_L("e_cfilewriter_runl_write 0")));                     
             if ( iError == KErrNone )
                 {
-                iOutputFileSize += iFullBufferQueue[0]->Des().Length();
+                UpdateOutputFileSize();
                 iFullBufferQueue[0]->Des().Zero();
                 iError = iEmptyBufferQueue.Append( iFullBufferQueue[0] );
                 if ( iError )
@@ -516,7 +554,7 @@
                     return;
                     }
                 iFullBufferQueue.Remove( 0 );
-    			PRINT((_L("CFileWriter::RunL() Hardlimit : Buffer sync written, Status: Full:%d Empty:%d Filesize:%d"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
+    			PRINT((_L("CFileWriter::RunL() Hardlimit : Buffer sync written, Status: Full:%d Empty:%d Filesize:%Ld"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
                 }   
             else
                 {
@@ -533,7 +571,7 @@
         PRINT((_L("e_cfilewriter_runl_outfile_write 0")));                     
         if ( iError == KErrNone )
             {
-            iOutputFileSize += iFullBufferQueue[0]->Des().Length();
+            UpdateOutputFileSize();
             iFullBufferQueue[0]->Des().Zero();
             iError = iEmptyBufferQueue.Append( iFullBufferQueue[0] );
             if ( iError )
@@ -544,7 +582,7 @@
                 return;
                 }
             iFullBufferQueue.Remove( 0 );
-    		PRINT((_L("CFileWriter::RunL() Softlimit : Buffer sync written, Status: Full:%d Empty:%d Filesize:%d"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
+    		PRINT((_L("CFileWriter::RunL() Softlimit : Buffer sync written, Status: Full:%d Empty:%d Filesize:%Ld"), iFullBufferQueue.Count(), iEmptyBufferQueue.Count(), iOutputFileSize ));
             }   
         else
             {
--- a/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_api_te.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_api_te.script	Thu Sep 16 18:57:38 2010 +0100
@@ -381,7 +381,7 @@
 //!                     8. Close one of composers.
 //!						9. Repeat Step 7 - 8 until all composers are closed. 
 //! @SYMTestExpectedResults 	Test should complete without any error
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPComposeMultiComposers C:\mm\tsu_3gp_compose_api_te.ini MM-3GP-COMP-U-0115-CP-1
+RUN_TEST_STEP  !Heap=0xC00000 -1 tsu_3gplibrary 3GPComposeMultiComposers C:\mm\tsu_3gp_compose_api_te.ini MM-3GP-COMP-U-0115-CP-1
 END_TESTCASE MM-3GP-COMP-U-0115-CP
 
 RUN_UTILS DeleteDirectory C:\3gplibrary\temp\MM-3GP-COMP-U-0116-CP\
--- a/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3g2_te.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3g2_te.script	Thu Sep 16 18:57:38 2010 +0100
@@ -28,10 +28,10 @@
 //! @SYMTestPriority 3
 //! @SYMTestActions Parse all files contained in the specified directory.  
 //! @SYMTestExpectedResults Parser returns error while retrieving data from the files.
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-1
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-2
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-3
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-4
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-5
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-6
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-1
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-2
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-3
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-4
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-5
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0503-CP-6
 END_TESTCASE MM-3GP-COMP-U-0503-CP
--- a/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3gp_te.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_3gp_te.script	Thu Sep 16 18:57:38 2010 +0100
@@ -28,11 +28,11 @@
 //! @SYMTestPriority 3
 //! @SYMTestActions Parse all files contained in the specified directory.  
 //! @SYMTestExpectedResults Parser returns error while retrieving data from the files.
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-1
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-2
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-3
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-4
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-5
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-6
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-1
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-2
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-3
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-4
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-5
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0501-CP-6
 END_TESTCASE MM-3GP-COMP-U-0501-CP
 
--- a/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_mp4_te.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gpunittest/scripts/tsu_3gp_compose_format_mp4_te.script	Thu Sep 16 18:57:38 2010 +0100
@@ -28,10 +28,10 @@
 //! @SYMTestPriority 3
 //! @SYMTestActions Parse all files contained in the specified directory.  
 //! @SYMTestExpectedResults Parser returns error while retrieving data from the files.
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-1
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-2
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-3
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-4
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-5
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-6
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-1
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-2
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-3
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-4
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-5
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_compose_format_te.ini MM-3GP-COMP-U-0502-CP-6
 END_TESTCASE MM-3GP-COMP-U-0502-CP
--- a/mmplugins/lib3gpunittest/scripts/tsu_3gp_performance_te.script	Thu Sep 16 18:39:58 2010 +0100
+++ b/mmplugins/lib3gpunittest/scripts/tsu_3gp_performance_te.script	Thu Sep 16 18:57:38 2010 +0100
@@ -38,6 +38,6 @@
 //! @SYMTestPriority 3
 //! @SYMTestActions Parse all files contained in the specified directory.  
 //! @SYMTestExpectedResults Parser returns error while retrieving data from the files.
-RUN_TEST_STEP -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_performance_te.ini MM-3GP-PERFORMANCE-U-0102-CP
+RUN_TEST_STEP !Heap=0xC00000 -1 tsu_3gplibrary 3GPParseComposeFile C:\mm\tsu_3gp_performance_te.ini MM-3GP-PERFORMANCE-U-0102-CP
 END_TESTCASE MM-3GP-PERFORMANCE-U-0102-CP
 
--- a/package_definition.xml	Thu Sep 16 18:39:58 2010 +0100
+++ b/package_definition.xml	Thu Sep 16 18:57:38 2010 +0100
@@ -385,6 +385,9 @@
    <component id="nga_mdf_postprocessor" name="NGA MDF Postprocessor" filter="s60">
     <unit bldFile="mdfdevvideoextensions/nga_mdf_postprocessor/group"/>
    </component>
+   <component id="nga_mdf_postprocessor_shai" name="NGA MDF Postprocessor shai" filter="s60">
+    <unit bldFile="mdfdevvideoextensions/nga_mdf_postprocessor_shai/group"/>
+   </component>
   </collection>
   <collection id="frametable_stub" name="Frametable Stub" level="device-fw">
 	<!-- collection is really a component. Needs to move down a directory -->