123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- /****************************************************************************
- *
- * Module Title : SystemDependant.c
- *
- * Description : Miscellaneous system dependant functions
- *
- ****************************************************************************/
- /****************************************************************************
- * Header Files
- ****************************************************************************/
- #include "postp.h"
-
- /****************************************************************************
- * Imports
- *****************************************************************************/
- extern void GetProcessorFlags(INT32 *MmxEnabled, INT32 *XmmEnabled, INT32 *WmtEnabled);
- // c imports
- extern void FilteringVert_12_C(UINT32 QValue,UINT8 * Src, INT32 Pitch);
- extern void FilteringHoriz_12_C(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void FilteringVert_8_C(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void FilteringHoriz_8_C(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void HorizontalLine_1_2_Scale_C( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void HorizontalLine_3_5_Scale_C( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void HorizontalLine_4_5_Scale_C( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void VerticalBand_4_5_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_4_5_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void VerticalBand_3_5_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_3_5_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void VerticalBand_1_2_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_1_2_Scale_C( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void FilterHoriz_Simple_C( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterVert_Simple_C( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterHoriz_Generic( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterVert_Generic( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern INT32 *SetupBoundingValueArray_Generic( POSTPROC_INSTANCE *pbi, INT32 FLimit );
- extern INT32 *SetupDeblockValueArray_Generic( POSTPROC_INSTANCE *pbi, INT32 FLimit );
- extern void DeringBlockWeak_C( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale );
- extern void DeringBlockStrong_C( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale);
- extern void DeblockLoopFilteredBand_C( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeblockNonFilteredBand_C( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeblockNonFilteredBandNewFilter_C( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void PlaneAddNoise_C( UINT8 *Start, UINT32 Width, UINT32 Height, INT32 Pitch, int q);
- // mmx imports
- extern void FilteringVert_12_MMX(UINT32 QValue,UINT8 * Src, INT32 Pitch);
- extern void FilteringHoriz_12_MMX(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void FilteringVert_8_MMX(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void FilteringHoriz_8_MMX(UINT32 QValue, UINT8 * Src, INT32 Pitch );
- extern void HorizontalLine_1_2_Scale_MMX( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void HorizontalLine_3_5_Scale_MMX( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void HorizontalLine_4_5_Scale_MMX( const unsigned char * source, unsigned int sourceWidth, unsigned char * dest, unsigned int destWidth );
- extern void VerticalBand_4_5_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_4_5_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void VerticalBand_3_5_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_3_5_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void VerticalBand_1_2_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void LastVerticalBand_1_2_Scale_MMX( unsigned char * dest, unsigned int destPitch, unsigned int destWidth );
- extern void FilterHoriz_Simple_MMX( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterVert_Simple_MMX( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterHoriz_MMX( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern void FilterVert_MMX( POSTPROC_INSTANCE *pbi, UINT8 * PixelPtr, INT32 LineLength, INT32 *BoundingValuePtr );
- extern INT32 *SetupBoundingValueArray_ForMMX( POSTPROC_INSTANCE *pbi, INT32 FLimit );
- extern INT32 *SetupDeblockValueArray_ForMMX( POSTPROC_INSTANCE *pbi, INT32 FLimit );
- extern void DeringBlockWeak_MMX( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale );
- extern void DeringBlockStrong_MMX( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale);
- extern void DeblockLoopFilteredBand_MMX( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeblockNonFilteredBand_MMX( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeblockNonFilteredBandNewFilter_MMX( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void FillLoopFilterLimitValues_MMX(void);
- extern INT16 *LoopFilterLimitValuesV2_MMX;
- extern void PlaneAddNoise_mmx( UINT8 *Start, UINT32 Width, UINT32 Height, INT32 Pitch, int q);
- // wmt imports
- extern void DeblockLoopFilteredBand_WMT( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeblockNonFilteredBand_WMT( POSTPROC_INSTANCE *pbi, UINT8 *SrcPtr, UINT8 *DesPtr, UINT32 PlaneLineStep, UINT32 FragsAcross, UINT32 StartFrag, UINT32 *QuantScale );
- extern void DeringBlockWeak_WMT( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale );
- extern void DeringBlockStrong_WMT( const POSTPROC_INSTANCE *pbi, const UINT8 *SrcPtr, UINT8 *DstPtr, const INT32 Pitch, UINT32 FragQIndex, UINT32 *QuantScale );
- extern void CFastDeInterlace(UINT8 * SrcPtr,UINT8 * DstPtr,INT32 Width,INT32 Height,INT32 Stride);
- extern void MmxFastDeInterlace(UINT8 * SrcPtr,UINT8 * DstPtr,INT32 Width,INT32 Height,INT32 Stride);
- extern void WmtFastDeInterlace(UINT8 * SrcPtr,UINT8 * DstPtr,INT32 Width,INT32 Height,INT32 Stride);
- extern void ClampLevels_C( POSTPROC_INSTANCE *pbi,INT32 BlackClamp,INT32 WhiteClamp,UINT8 *Src,UINT8 *Dst);
- extern void ClampLevels_wmt( POSTPROC_INSTANCE *pbi,INT32 BlackClamp,INT32 WhiteClamp,UINT8 *Src,UINT8 *Dst);
- extern void ClampLevels_mmx( POSTPROC_INSTANCE *pbi,INT32 BlackClamp,INT32 WhiteClamp,UINT8 *Src,UINT8 *Dst);
- extern void PlaneAddNoise_wmt( UINT8 *Start, UINT32 Width, UINT32 Height, INT32 Pitch, int q);
- /****************************************************************************
- *
- * ROUTINE : PostProcMachineSpecificConfig
- *
- * INPUTS : UINT32 Version : Codec version number.
- *
- * OUTPUTS : None.
- *
- * RETURNS : void
- *
- * FUNCTION : Checks for machine specifc features such as MMX support
- * sets appropriate flags and function pointers.
- *
- * SPECIAL NOTES : None.
- *
- ****************************************************************************/
- void PostProcMachineSpecificConfig ( UINT32 Version )
- {
- // If MMX supported then set to use MMX versions of functions else
- // use original 'C' versions.
- INT32 MmxEnabled;
- INT32 XmmEnabled;
- INT32 WmtEnabled;
- GetProcessorFlags( &MmxEnabled, &XmmEnabled, &WmtEnabled );
-
- if ( WmtEnabled )
- {
- // Willamette
- FillLoopFilterLimitValues_MMX();
- FilterHoriz = FilterHoriz_MMX;
- FilterVert = FilterVert_MMX;
- SetupBoundingValueArray = SetupBoundingValueArray_ForMMX;
- SetupDeblockValueArray = SetupDeblockValueArray_ForMMX;
- DeringBlockWeak = DeringBlockWeak_WMT;
- DeringBlockStrong = DeringBlockStrong_WMT;
- DeblockLoopFilteredBand = DeblockLoopFilteredBand_WMT;
- DeblockNonFilteredBand = DeblockNonFilteredBand_WMT;
- DeblockNonFilteredBandNewFilter = DeblockNonFilteredBandNewFilter_MMX;
- FilterHoriz_Simple = FilterHoriz_Simple_MMX;
- FilterVert_Simple = FilterVert_Simple_MMX;
- HorizontalLine_1_2_Scale = HorizontalLine_1_2_Scale_MMX;
- HorizontalLine_3_5_Scale = HorizontalLine_3_5_Scale_MMX;
- HorizontalLine_4_5_Scale = HorizontalLine_4_5_Scale_MMX;
- VerticalBand_1_2_Scale = VerticalBand_1_2_Scale_MMX;
- LastVerticalBand_1_2_Scale = LastVerticalBand_1_2_Scale_MMX;
- VerticalBand_3_5_Scale = VerticalBand_3_5_Scale_MMX;
- LastVerticalBand_3_5_Scale = LastVerticalBand_3_5_Scale_MMX;
- VerticalBand_4_5_Scale = VerticalBand_4_5_Scale_MMX;
- LastVerticalBand_4_5_Scale = LastVerticalBand_4_5_Scale_MMX;
- FilteringHoriz_8 = FilteringHoriz_8_MMX;
- FilteringVert_8 = FilteringVert_8_MMX;
- FilteringHoriz_12 = FilteringHoriz_12_MMX;
- FilteringVert_12 = FilteringVert_12_MMX;
- FastDeInterlace = WmtFastDeInterlace;
- ClampLevels = ClampLevels_wmt;
- PlaneAddNoise = PlaneAddNoise_wmt;
- }
- else if ( MmxEnabled )
- {
- FillLoopFilterLimitValues_MMX();
- FilterHoriz = FilterHoriz_MMX;
- FilterVert = FilterVert_MMX;
- SetupBoundingValueArray = SetupBoundingValueArray_ForMMX;
- SetupDeblockValueArray = SetupDeblockValueArray_ForMMX;
- DeringBlockWeak = DeringBlockWeak_MMX;
- DeringBlockStrong = DeringBlockStrong_MMX;
- DeblockLoopFilteredBand = DeblockLoopFilteredBand_MMX;
- DeblockNonFilteredBand = DeblockNonFilteredBand_MMX;
- DeblockNonFilteredBandNewFilter = DeblockNonFilteredBandNewFilter_MMX;
- FilterHoriz_Simple = FilterHoriz_Simple_MMX;
- FilterVert_Simple = FilterVert_Simple_MMX;
- HorizontalLine_1_2_Scale = HorizontalLine_1_2_Scale_MMX;
- HorizontalLine_3_5_Scale = HorizontalLine_3_5_Scale_MMX;
- HorizontalLine_4_5_Scale = HorizontalLine_4_5_Scale_MMX;
- VerticalBand_1_2_Scale = VerticalBand_1_2_Scale_MMX;
- LastVerticalBand_1_2_Scale = LastVerticalBand_1_2_Scale_MMX;
- VerticalBand_3_5_Scale = VerticalBand_3_5_Scale_MMX;
- LastVerticalBand_3_5_Scale = LastVerticalBand_3_5_Scale_MMX;
- VerticalBand_4_5_Scale = VerticalBand_4_5_Scale_MMX;
- LastVerticalBand_4_5_Scale = LastVerticalBand_4_5_Scale_MMX;
- FilteringHoriz_8 = FilteringHoriz_8_MMX;
- FilteringVert_8 = FilteringVert_8_MMX;
- FilteringHoriz_12 = FilteringHoriz_12_MMX;
- FilteringVert_12 = FilteringVert_12_MMX;
- FastDeInterlace = MmxFastDeInterlace;
- ClampLevels = ClampLevels_mmx;
- PlaneAddNoise = PlaneAddNoise_mmx;
- }
- else
- {
- FilterHoriz = FilterHoriz_Generic;
- FilterVert = FilterVert_Generic;
- SetupBoundingValueArray = SetupBoundingValueArray_Generic;
- SetupDeblockValueArray = SetupDeblockValueArray_Generic;
- DeringBlockWeak = DeringBlockWeak_C;
- DeringBlockStrong = DeringBlockStrong_C;
- DeblockLoopFilteredBand = DeblockLoopFilteredBand_C;
- DeblockNonFilteredBand = DeblockNonFilteredBand_C;
- DeblockNonFilteredBandNewFilter = DeblockNonFilteredBandNewFilter_C;
- FilterHoriz_Simple = FilterHoriz_Simple_C;
- FilterVert_Simple = FilterVert_Simple_C;
- HorizontalLine_1_2_Scale = HorizontalLine_1_2_Scale_C;
- VerticalBand_1_2_Scale = VerticalBand_1_2_Scale_C;
- LastVerticalBand_1_2_Scale = LastVerticalBand_1_2_Scale_C;
- HorizontalLine_3_5_Scale = HorizontalLine_3_5_Scale_C;
- VerticalBand_3_5_Scale = VerticalBand_3_5_Scale_C;
- LastVerticalBand_3_5_Scale = LastVerticalBand_3_5_Scale_C;
- HorizontalLine_4_5_Scale = HorizontalLine_4_5_Scale_C;
- VerticalBand_4_5_Scale = VerticalBand_4_5_Scale_C;
- LastVerticalBand_4_5_Scale = LastVerticalBand_4_5_Scale_C;
- FilteringHoriz_8 = FilteringHoriz_8_C;
- FilteringVert_8 = FilteringVert_8_C;
- FilteringHoriz_12 = FilteringHoriz_12_C;
- FilteringVert_12 = FilteringVert_12_C;
- FastDeInterlace = CFastDeInterlace;
- ClampLevels = ClampLevels_C;
- PlaneAddNoise = PlaneAddNoise_C;
- }
- }
|