⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timgfilternoise.h

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 H
字号:
#ifndef _TIMGFILTERNOISE_H_
#define _TIMGFILTERNOISE_H_

#include "TimgFilter.h"
#include "TnoiseSettings.h"
#include "simd.h"

DECLARE_FILTER(TimgFilterNoise,public,TimgFilter)
public:
 static const int patt[4];
private:
 int noiseAvihStrength,noiseAvihStrengthChroma;
 int oldPattern;
 int oldcsp;void doneChroma(void);
 short *noiseMask[3];stride_t noiseMaskStride[3];int noiseCount[3];
 void genAVIHnoise(int plane,int strength);
 TnoiseSettings oldnoise;
 static __m64 noiseConst64,noisenext64;
 #ifdef __SSE2__
  static __m128i noiseConst128,noisenext128;
 #endif
 template<class _mm> struct Tnoise
  {
   static typename _mm::__m &noiseConst(),&noisenext();
   static void init(void);
   static void reset(void);
  };
 template<class _mm,bool chroma,bool avih,bool uniform> static void addNoise(const unsigned char *src,stride_t srcStride,unsigned char *dst,stride_t dstStride,unsigned int dx,unsigned int dy,short *noiseMask,stride_t noiseMaskStride,int noiseStrength);
 template<class _mm,bool chroma,bool avih> static void generateAddNoise(const unsigned char *src,stride_t srcStride,unsigned char *dst,stride_t dstStride,unsigned int dx,unsigned int dy,int noiseStrength,int uniformNoise,short *noiseMask,stride_t noiseMaskStride,int noiseCount);
 void (TimgFilterNoise::*processLumaFc)(const TnoiseSettings *cfg,const unsigned char *srcY,unsigned char *dstY);
 template<class _mm> void processLuma(const TnoiseSettings *cfg,const unsigned char *srcY,unsigned char *dstY);
 void (TimgFilterNoise::*processChromaFc)(const TnoiseSettings *cfg,const unsigned char *srcU,const unsigned char *srcV,unsigned char *dstU,unsigned char *dstV);
 template<class _mm> void processChroma(const TnoiseSettings *cfg,const unsigned char *srcU,const unsigned char *srcV,unsigned char *dstU,unsigned char *dstV);
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
 virtual void onSizeChange(void);
public:
 TimgFilterNoise(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual void done(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
};

DECLARE_FILTER(TimgFilterNoiseMplayer,public,TimgFilter)
private:
 struct Tprocess : safe_bool<Tprocess>
  {
  private:
   enum
    {
     MAX_NOISE=4096,
     MAX_SHIFT=1024,
     MAX_RES=MAX_NOISE-MAX_SHIFT
    };
   static int RAND_N(int range)
    {
     return int((double)range*rand()/(RAND_MAX+1.0));
    }
   int8_t *noise;
   int8_t *prev_shift[MAX_RES][3];
   int nonTempRandShift[MAX_RES];
   int shiftptr;
   TnoiseSettings cfg;
   void (*lineNoise)(uint8_t *dst,const uint8_t *src, int8_t *noise, int len, int shift);
   void (*lineNoiseAvg)(uint8_t *dst,const uint8_t *src, int len, int8_t **shift);
   static void lineNoise_C(uint8_t *dst,const uint8_t *src, int8_t *noise, int len, int shift);
   template<class _mm> static void lineNoise_simd(uint8_t *dst,const uint8_t *src, int8_t *noise, int len, int shift);
   static void lineNoiseAvg_C(uint8_t *dst,const uint8_t *src, int len, int8_t **shift);
   template<class _mm> static void lineNoiseAvg_simd(uint8_t *dst,const uint8_t *src, int len, int8_t **shift);
  public:
   Tprocess(void);
   ~Tprocess()
    {
     done();
    };
   void init(int strength,const TnoiseSettings *cfg);
   void process(const uint8_t *src,uint8_t *dst,stride_t dstStride,stride_t srcStride,unsigned int width,unsigned int height);
   void done(void);
   bool boolean_test(void) const {return !!noise;}
  } y,uv;
 TnoiseSettings oldnoise;
 int oldcsp;void doneChroma(void);
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
 virtual void onSizeChange(void) {done();}
public:
 TimgFilterNoiseMplayer(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual void done(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
};

#include "TpictPropSettings.h"
class TimgFilterLuma;
DECLARE_FILTER(TimgFilterFlicker,public,TimgFilter)
private:
 TimgFilterLuma *luma;TpictPropSettings lumaSettings;int lumaT;
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
public:
 TimgFilterFlicker(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual ~TimgFilterFlicker();
 virtual void done(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
};

#include "ToffsetSettings.h"
class TimgFilterOffset;
DECLARE_FILTER(TimgFilterShake,public,TimgFilter)
private:
 TimgFilterOffset *offset;ToffsetSettings offsetSettings;int offsetTX,offsetTY;
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
public:
 TimgFilterShake(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual ~TimgFilterShake();
 virtual void done(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
};

DECLARE_FILTER(TimgFilterFilmLines,public,TimgFilter)
private:
 struct Tline
  {
  private:
   unsigned int dx;
   int life;
  public:
   bool firsttime;
   Tline(void):firsttime(true) {}
   Tline(const TnoiseSettings *cfg);
   void setDx(unsigned int Idx);
   bool update(void);
   unsigned char color;
   int strength;
   int x,diffx;
  };
 typedef std::list<Tline> Tlines;
 Tlines lines;int linesT;
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
 virtual void onSizeChange(void);
public:
 TimgFilterFilmLines(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual void done(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
 virtual void onSeek(void);
};

DECLARE_FILTER(TimgFilterScratches,public,TimgFilter)
private:
 int scratchesT;
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSPS_MASK_YUV_PLANAR;}
public:
 TimgFilterScratches(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg0);
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -