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

📄 tconvert.h

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

#include "interfaces.h"
#include "ffImgfmt.h"
#include "IffColorspaceConvert.h"

//#define AVISYNTH_BITBLT //use avisynth bitblt function to just copy frame when no colorspace conversion is needed
#define XVID_BITBLT //use xvid's YV12 -> YV12 copy function - seems to be fastest

struct Tswscale;
struct Tconfig;
struct Tlibmplayer;
struct TcspInfo;
struct Tpalette;
struct TffPict;
class Tconvert
{
private:
 void init(Tlibmplayer *Ilibmplayer,bool IavisynthYV12_RGB,unsigned int Idx,unsigned int Idy);
 bool avisynthYV12_RGB;
 Tlibmplayer *libmplayer;
 Tswscale *swscale;bool initsws;
 int oldincsp,oldoutcsp;
 int incsp1,outcsp1;
 const TcspInfo *incspInfo,*outcspInfo;

 enum
  {
   MODE_none,
   MODE_avisynth_yv12_to_yuy2,
   MODE_xvidImage_output,
   MODE_avisynth_yuy2_to_yv12,
   MODE_mmx_ConvertRGB32toYUY2,
   MODE_mmx_ConvertRGB24toYUY2,
   MODE_mmx_ConvertYUY2toRGB32,
   MODE_mmx_ConvertYUY2toRGB24,
   MODE_mmx_ConvertUYVYtoRGB32,
   MODE_mmx_ConvertUYVYtoRGB24,
   MODE_palette8torgb,
   MODE_CLJR,
   MODE_xvidImage_input,
   MODE_swscale,
   MODE_avisynth_bitblt,
   MODE_fallback
  } mode;
 static const char_t* getModeName(int mode);

 void (*avisynth_yv12_to_yuy2)(const BYTE* srcY, const BYTE* srcU, const BYTE* srcV, int src_rowsize, stride_t src_pitch, stride_t src_pitch_uv,
                               BYTE* dst, stride_t dst_pitch,
                               int height);
 void (*avisynth_yuy2_to_yv12)(const BYTE* src, int src_rowsize, stride_t src_pitch,
                               BYTE* dstY, BYTE* dstU, BYTE* dstV, stride_t dst_pitch, stride_t dst_pitchUV,
                               int height);
 void (*palette8torgb)(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
 int tmpcsp;
 unsigned char *tmp[3];stride_t tmpStride[3];
 Tconvert *tmpConvert1,*tmpConvert2;
 #ifdef AVISYNTH_BITBLT
 unsigned int rowsize;
 #endif
 void freeTmpConvert(void);
public:
 Tconvert(IffdshowBase *deci,unsigned int Idx,unsigned int Idy);
 Tconvert(Tlibmplayer *Ilibmplayer,bool IavisynthYV12_RGB,unsigned int Idx,unsigned int Idy);
 ~Tconvert();
 unsigned int dx,dy,outdy;
 int convert(int incsp,const uint8_t*const src[],const stride_t srcStride[],int outcsp,uint8_t* dst[],stride_t dstStride[],const Tpalette *srcpal);
 int convert(const TffPict &pict,int outcsp,uint8_t* dst[],stride_t dstStride[]);
};

class TffColorspaceConvert :public CUnknown,
                            public IffColorspaceConvert
{
private:
 Tconfig *config;
 Tlibmplayer *libmplayer;
 Tconvert *c;
public:
 static CUnknown* WINAPI CreateInstance(LPUNKNOWN punk,HRESULT *phr);
 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
 DECLARE_IUNKNOWN

 TffColorspaceConvert(LPUNKNOWN punk,HRESULT *phr);
 virtual ~TffColorspaceConvert();

 STDMETHODIMP allocPicture(int csp,unsigned int dx,unsigned int dy,uint8_t *data[],stride_t stride[]);
 STDMETHODIMP freePicture(uint8_t *data[]);
 STDMETHODIMP convert(unsigned int dx,unsigned int dy,int incsp,uint8_t *src[],const stride_t srcStride[],int outcsp,uint8_t *dst[],stride_t dstStride[]);
 STDMETHODIMP convertPalette(unsigned int dx,unsigned int dy,int incsp,uint8_t *src[],const stride_t srcStride[],int outcsp,uint8_t *dst[],stride_t dstStride[],const unsigned char *pal,unsigned int numcolors);
};

#endif

⌨️ 快捷键说明

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