[svn] / branches / release-1_3-branch / xvidcore / dshow / src / CXvidDecoder.h Repository:
ViewVC logotype

Diff of /branches/release-1_3-branch/xvidcore/dshow/src/CXvidDecoder.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/xvidcore/dshow/src/CXvidDecoder.h revision 1428, Wed Apr 14 03:25:41 2004 UTC branches/release-1_3-branch/xvidcore/dshow/src/CXvidDecoder.h revision 2114, Sun Jun 14 19:18:14 2015 UTC
# Line 3  Line 3 
3   *  XVID MPEG-4 VIDEO CODEC   *  XVID MPEG-4 VIDEO CODEC
4   *  - XviD Decoder part of the DShow Filter  -   *  - XviD Decoder part of the DShow Filter  -
5   *   *
6   *  Copyright(C) 2002-2003 Peter Ross <pross@xvid.org>   *  Copyright(C) 2002-2012 Peter Ross <pross@xvid.org>
7   *   *
8   *  This program is free software ; you can redistribute it and/or modify   *  This program is free software ; you can redistribute it and/or modify
9   *  it under the terms of the GNU General Public License as published by   *  it under the terms of the GNU General Public License as published by
# Line 19  Line 19 
19   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: CXvidDecoder.h,v 1.3 2004-04-14 03:25:41 syskin Exp $   * $Id$
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
26  #ifndef _FILTER_H_  #ifndef _FILTER_H_
27  #define _FILTER_H_  #define _FILTER_H_
28    
29    #include <time.h>
30  #include <xvid.h>  #include <xvid.h>
31  #include "IXvidDecoder.h"  #include "IXvidDecoder.h"
32    
33    #define XVID_NAME_L             L"Xvid MPEG-4 Video Decoder"
34  #define XVID_NAME_L             L"XviD MPEG-4 Video Decoder"  #define XVID_NAME_MFT_L L"Xvid MPEG-4 Video Decoder MFT"
35    
36  /* --- fourcc --- */  /* --- fourcc --- */
37    
38  #define FOURCC_XVID     mmioFOURCC('X','V','I','D')  #define FOURCC_XVID     mmioFOURCC('X','V','I','D')
39    #define FOURCC_xvid     mmioFOURCC('x','v','i','d')
40  #define FOURCC_DIVX     mmioFOURCC('D','I','V','X')  #define FOURCC_DIVX     mmioFOURCC('D','I','V','X')
41    #define FOURCC_divx     mmioFOURCC('d','i','v','x')
42  #define FOURCC_DX50     mmioFOURCC('D','X','5','0')  #define FOURCC_DX50     mmioFOURCC('D','X','5','0')
43  #define FOURCC_MP4V     mmioFOURCC('m','p','4','v')  #define FOURCC_dx50     mmioFOURCC('d','x','5','0')
44    #define FOURCC_MP4V     mmioFOURCC('M','P','4','V')
45    #define FOURCC_mp4v     mmioFOURCC('m','p','4','v')
46    #define FOURCC_3IVX     mmioFOURCC('3','I','V','X')
47    #define FOURCC_3ivx     mmioFOURCC('3','i','v','x')
48    #define FOURCC_3IV0     mmioFOURCC('3','I','V','0')
49    #define FOURCC_3iv0     mmioFOURCC('3','i','v','0')
50    #define FOURCC_3IV1     mmioFOURCC('3','I','V','1')
51    #define FOURCC_3iv1     mmioFOURCC('3','i','v','1')
52    #define FOURCC_3IV2     mmioFOURCC('3','I','V','2')
53    #define FOURCC_3iv2     mmioFOURCC('3','i','v','2')
54    #define FOURCC_LMP4     mmioFOURCC('L','M','P','4')
55    #define FOURCC_lmp4     mmioFOURCC('l','m','p','4')
56    #define FOURCC_RMP4     mmioFOURCC('R','M','P','4')
57    #define FOURCC_rmp4     mmioFOURCC('r','m','p','4')
58    #define FOURCC_SMP4     mmioFOURCC('S','M','P','4')
59    #define FOURCC_smp4     mmioFOURCC('s','m','p','4')
60    #define FOURCC_HDX4     mmioFOURCC('H','D','X','4')
61    #define FOURCC_hdx4     mmioFOURCC('h','d','x','4')
62    
63  /* --- media uids --- */  /* --- media uids --- */
64    
# Line 47  Line 68 
68  DEFINE_GUID(CLSID_DIVX_UC,      mmioFOURCC('D','I','V','X'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  DEFINE_GUID(CLSID_DIVX_UC,      mmioFOURCC('D','I','V','X'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
69  DEFINE_GUID(CLSID_DX50,         mmioFOURCC('d','x','5','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  DEFINE_GUID(CLSID_DX50,         mmioFOURCC('d','x','5','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
70  DEFINE_GUID(CLSID_DX50_UC,      mmioFOURCC('D','X','5','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  DEFINE_GUID(CLSID_DX50_UC,      mmioFOURCC('D','X','5','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
71    DEFINE_GUID(CLSID_3IVX,         mmioFOURCC('3','i','v','x'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
72    DEFINE_GUID(CLSID_3IVX_UC,      mmioFOURCC('3','I','V','X'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
73    DEFINE_GUID(CLSID_3IV0,         mmioFOURCC('3','i','v','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
74    DEFINE_GUID(CLSID_3IV0_UC,      mmioFOURCC('3','I','V','0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
75    DEFINE_GUID(CLSID_3IV1,         mmioFOURCC('3','i','v','1'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
76    DEFINE_GUID(CLSID_3IV1_UC,      mmioFOURCC('3','I','V','1'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
77    DEFINE_GUID(CLSID_3IV2,         mmioFOURCC('3','i','v','2'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
78    DEFINE_GUID(CLSID_3IV2_UC,      mmioFOURCC('3','I','V','2'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
79    DEFINE_GUID(CLSID_LMP4,         mmioFOURCC('l','m','p','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
80    DEFINE_GUID(CLSID_LMP4_UC,      mmioFOURCC('L','M','P','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
81    DEFINE_GUID(CLSID_RMP4,         mmioFOURCC('r','m','p','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
82    DEFINE_GUID(CLSID_RMP4_UC,      mmioFOURCC('R','M','P','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
83    DEFINE_GUID(CLSID_SMP4,         mmioFOURCC('s','m','p','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
84    DEFINE_GUID(CLSID_SMP4_UC,      mmioFOURCC('S','M','P','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
85    DEFINE_GUID(CLSID_HDX4,         mmioFOURCC('h','d','x','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
86    DEFINE_GUID(CLSID_HDX4_UC,      mmioFOURCC('H','D','X','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
87  DEFINE_GUID(CLSID_MP4V,         mmioFOURCC('m','p','4','v'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  DEFINE_GUID(CLSID_MP4V,         mmioFOURCC('m','p','4','v'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
88    DEFINE_GUID(CLSID_MP4V_UC,              mmioFOURCC('M','P','4','V'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
89    
90    
91  /* MEDIATYPE_IYUV is not always defined in the directx headers */  /* MEDIATYPE_IYUV is not always defined in the directx headers */
92  DEFINE_GUID(CLSID_MEDIASUBTYPE_IYUV, 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);  DEFINE_GUID(CLSID_MEDIASUBTYPE_IYUV, 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
93    
94    
95  class CXvidDecoder : public CVideoTransformFilter, public IXvidDecoder, public ISpecifyPropertyPages  class CXvidDecoder :
96            public CVideoTransformFilter,
97            public IXvidDecoder,
98            public ISpecifyPropertyPages
99    #if defined(XVID_USE_MFT)
100        ,public IMFTransform
101    #endif
102  {  {
103    
104  public :  public :
# Line 66  Line 110 
110          CXvidDecoder(LPUNKNOWN punk, HRESULT *phr);          CXvidDecoder(LPUNKNOWN punk, HRESULT *phr);
111          ~CXvidDecoder();          ~CXvidDecoder();
112    
113            HRESULT CompleteConnect(PIN_DIRECTION direction, IPin *pReceivePin);
114            HRESULT BreakConnect(PIN_DIRECTION dir);
115    
116          HRESULT CheckInputType(const CMediaType * mtIn);          HRESULT CheckInputType(const CMediaType * mtIn);
117          HRESULT GetMediaType(int iPos, CMediaType * pmt);          HRESULT GetMediaType(int iPos, CMediaType * pmt);
118          HRESULT SetMediaType(PIN_DIRECTION direction, const CMediaType *pmt);          HRESULT SetMediaType(PIN_DIRECTION direction, const CMediaType *pmt);
# Line 78  Line 125 
125          STDMETHODIMP GetPages(CAUUID * pPages);          STDMETHODIMP GetPages(CAUUID * pPages);
126          STDMETHODIMP FreePages(CAUUID * pPages);          STDMETHODIMP FreePages(CAUUID * pPages);
127    
128      /* IMFTransform */
129    #if defined(XVID_USE_MFT)
130            STDMETHODIMP MFTGetStreamLimits(DWORD *pdwInputMinimum, DWORD *pdwInputMaximum, DWORD *pdwOutputMinimum, DWORD *pdwOutputMaximum);
131            STDMETHODIMP MFTGetStreamCount(DWORD *pcInputStreams, DWORD *pcOutputStreams);
132            STDMETHODIMP MFTGetStreamIDs(DWORD dwInputIDArraySize, DWORD *pdwInputIDs, DWORD dwOutputIDArraySize, DWORD *pdwOutputIDs);
133            STDMETHODIMP MFTGetInputStreamInfo(DWORD dwInputStreamID, MFT_INPUT_STREAM_INFO *pStreamInfo);
134            STDMETHODIMP MFTGetOutputStreamInfo(DWORD dwOutputStreamID, MFT_OUTPUT_STREAM_INFO *pStreamInfo);
135            STDMETHODIMP GetAttributes(IMFAttributes** pAttributes);
136            STDMETHODIMP GetInputStreamAttributes(DWORD dwInputStreamID, IMFAttributes **ppAttributes);
137            STDMETHODIMP GetOutputStreamAttributes(DWORD dwOutputStreamID, IMFAttributes **ppAttributes);
138            STDMETHODIMP MFTDeleteInputStream(DWORD dwStreamID);
139            STDMETHODIMP MFTAddInputStreams(DWORD cStreams, DWORD *adwStreamIDs);
140            STDMETHODIMP MFTGetInputAvailableType(DWORD dwInputStreamID, DWORD dwTypeIndex, IMFMediaType **ppType);
141            STDMETHODIMP MFTGetOutputAvailableType(DWORD dwOutputStreamID, DWORD dwTypeIndex, IMFMediaType **ppType);
142            STDMETHODIMP MFTSetInputType(DWORD dwInputStreamID, IMFMediaType *pType, DWORD dwFlags);
143            STDMETHODIMP MFTSetOutputType(DWORD dwOutputStreamID, IMFMediaType *pType, DWORD dwFlags);
144            STDMETHODIMP MFTGetInputCurrentType(DWORD dwInputStreamID, IMFMediaType **ppType);
145            STDMETHODIMP MFTGetOutputCurrentType(DWORD dwOutputStreamID, IMFMediaType **ppType);
146            STDMETHODIMP MFTGetInputStatus(DWORD dwInputStreamID, DWORD *pdwFlags);
147            STDMETHODIMP MFTGetOutputStatus(DWORD *pdwFlags);
148            STDMETHODIMP MFTSetOutputBounds(LONGLONG hnsLowerBound, LONGLONG hnsUpperBound);
149            STDMETHODIMP MFTProcessEvent(DWORD dwInputStreamID, IMFMediaEvent *pEvent);
150            STDMETHODIMP MFTProcessMessage(MFT_MESSAGE_TYPE eMessage, ULONG_PTR ulParam);
151    
152            STDMETHODIMP MFTProcessInput(DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags);
153            STDMETHODIMP MFTProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount, MFT_OUTPUT_DATA_BUFFER *pOutputSamples, DWORD *pdwStatus);
154    #endif  /* XVID_USE_MFT */
155    
156  private :  private :
157    
158          HRESULT ChangeColorspace(GUID subtype, GUID formattype, void * format);          HRESULT ChangeColorspace(GUID subtype, GUID formattype, void * format, int *bitdepth, int noflip);
159            HRESULT OpenLib();
160          void CloseLib();          void CloseLib();
161    
162          xvid_dec_create_t m_create;          xvid_dec_create_t m_create;
# Line 90  Line 166 
166          int (*xvid_global_func)(void *handle, int opt, void *param1, void *param2);          int (*xvid_global_func)(void *handle, int opt, void *param1, void *param2);
167          int (*xvid_decore_func)(void *handle, int opt, void *param1, void *param2);          int (*xvid_decore_func)(void *handle, int opt, void *param1, void *param2);
168          int ar_x, ar_y;          int ar_x, ar_y;
169            bool forced_ar;
170    
171          int rgb_flip;          int rgb_flip;
172            int out_stride;
173    
174            clock_t m_startClock;
175            int m_tray_icon;
176    
177            /* mft stuff */
178    #if defined(XVID_USE_MFT)
179            BOOL HasPendingOutput() const { return m_frame.output.plane[1] != NULL; }
180    
181            HRESULT OnSetInputType(IMFMediaType *pmt);
182            HRESULT OnCheckInputType(IMFMediaType *pmt);
183    
184            HRESULT OnSetOutputType(IMFMediaType *pmt, int bitdepth);
185    
186            IMFMediaType *m_pInputType;
187            IMFMediaType *m_pOutputType;
188            int m_pOutputTypeBPP;
189    
190            CRITICAL_SECTION m_mft_lock;
191            REFERENCE_TIME m_timestamp;
192            REFERENCE_TIME m_timelength;
193    
194            int m_discont;
195    
196            /* Used to construct or interpolate missing timestamps */
197            REFERENCE_TIME m_rtFrame;
198            MFRatio m_frameRate;
199            UINT64 m_duration;
200    
201            HANDLE m_thread_handle;
202    #endif
203  };  };
204    #define WM_ICONMESSAGE (WM_USER + 1)
205    
206    static const int PARS[][2] = {
207            {1, 1},
208            {12, 11},
209            {10, 11},
210            {16, 11},
211            {40, 33},
212            {0, 0},
213    };
214    
215  #endif /* _FILTER_H_ */  #endif /* _FILTER_H_ */

Legend:
Removed from v.1428  
changed lines
  Added in v.2114

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4