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

📄 timgfilterosd.h

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

#include "TimgFilter.h"
#include "Tfont.h"
#include "Tsubreader.h"
#include "TsubtitleText.h"
#include "TOSDprovider.h"

struct TfontSettingsOSD;
struct TOSDsettings;
class Ttranslate;
struct TOSDsettingsVideo;
class TimgFilterOSD : public TimgFilter,public TOSDprovider
_DECLARE_FILTER(TimgFilterOSD,TimgFilter)
private:
 TimgFiltersPlayer *parent;
 Ttranslate *trans;
 struct TosdLine
  {
  private:
   IOSDprovider *provider;
   const Tconfig *config;
   TsubtitleTextBase<char_t> sub;
   bool firsttime;
   struct TosdValue
    {
    private:
     char_t s[512],olds[512];int oldVal;
     Rational oldSar,oldDar;
     double oldDuration;
     IOSDprovider *provider;
     int type;
     mutable const char_t *name;
    public:
     TosdValue(void):name(NULL),provider(NULL) {}
     TosdValue(int Itype,IOSDprovider *Iprovider):type(Itype),provider(Iprovider),oldDuration(-1),name(NULL)
      {
       s[0]=olds[0]='\0';
       oldVal=-1;
      }
     const char_t* getName(void) const;
     const char_t* getVal(bool &wasChange,bool &splitline,const TffPict &pict);
    };
   struct TosdToken
    {
    public:
     enum
      {
       TOKEN_STRING,
       TOKEN_VALUE,
      } type;
    private:
     ffstring string;
     TosdValue val;
    public:
     TosdToken(const char_t *s):type(TOKEN_STRING),string(s) {}
     TosdToken(int Itype,IOSDprovider *Iprovider):type(TOKEN_VALUE),val(Itype,Iprovider) {}
     const char_t *getName(void) const;
     const char_t *getStr(bool &wasChange,bool &splitline,const TffPict &pict)
      {
       switch (type)
        {
         case TOKEN_VALUE:return val.getVal(wasChange,splitline,pict);
         default:
         case TOKEN_STRING:wasChange=splitline=false;return string.c_str();
        }
      }
    };
   typedef std::vector<TosdToken> TosdTokens;
   TosdTokens tokens;
  public:
   TosdLine(IffdshowBase *Ideci,IffdshowDec *IdeciB,IffdshowDecVideo *IdeciV,const Tconfig *Iconfig,const ffstring &Iformat,const TfontSettings *fontSettings,unsigned int Iduration,IOSDprovider *Iprovider,bool Iitalic=false);
   int duration;
   Tfont font;
   void print(IffdshowBase *deci,const TffPict &pict,unsigned char *dst[4],stride_t stride[4],unsigned int dxY,unsigned int dyY,unsigned int x,unsigned int &y,int linespace,FILE *f,bool fileonly);
   const char_t *getName(unsigned int i) const;
  };

 struct Tosds : public std::vector<TosdLine*>
  {
  private:
   char_t name[260];
   FILE *f;int oldSave;char_t oldSaveFlnm[MAX_PATH];
   ffstring startupFormat;int startupDuration;
   char_t oldFormat[256];
  public:
   Tosds(IOSDprovider *Iprovider=NULL,const char_t *Iname=NULL);
   ~Tosds();
   bool is;
   IOSDprovider *provider;
   void init(bool allowSave,IffdshowBase *deci,IffdshowDec *deciD,IffdshowDecVideo *deciV,const Tconfig *config,TfontSettingsOSD *oldFont,const TOSDsettings *cfg,int framecnt);
   void fontInit(const TfontSettingsOSD *fontSettings);
   void print(IffdshowBase *deci,const TffPict &pict,unsigned char *dst[4],stride_t stride[4],unsigned int dxY,unsigned int dyY,unsigned int x,unsigned int &y,int linespace,bool fileonly);
   void done(void);
   void freeOsds(void);
  };
 Tosds shortOSD;

 // IOSDprovider
 STDMETHODIMP_(const char_t*) getInfoItemName(int type);

 struct TprovOSDs : std::vector<Tosds*>
  {
   bool empty(void) const;
  };
 TprovOSDs provOSDs;
 CCritSec csProvider;

 TfontSettingsOSD *oldFont;
 unsigned int framecnt;
 Tfont fontUser;
 TsubtitleTextBase<char_t> subUser;
 char_t oldLinesUser[256];
 strings linesUser;

 CCritSec cs;
 typedef std::pair<ffstring,unsigned int> TshortOsdTemp;
 std::vector<TshortOsdTemp> shortOSDtemp;
protected:
 virtual bool is(const TffPictBase &pict,const TfilterSettingsVideo *cfg);
 virtual int getSupportedInputColorspaces(const TfilterSettingsVideo *cfg) const {return FF_CSP_420P;}
 virtual void onSizeChange(void);
public:
 TimgFilterOSD(IffdshowBase *Ideci,Tfilters *Iparent);
 virtual ~TimgFilterOSD(void);
 virtual HRESULT process(TfilterQueue::iterator it,TffPict &pict,const TfilterSettingsVideo *cfg);
 virtual void done(void);
 bool shortOSDmessage(const char_t *msg,unsigned int duration);
 HRESULT registerOSDprovider(IOSDprovider *provider,const char *name);
 HRESULT unregisterOSDprovider(IOSDprovider *provider);
};

#endif

⌨️ 快捷键说明

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