| // Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style license | |
| // that can be found in the LICENSE file in the root of the source | |
| // tree. An additional intellectual property rights grant can be found | |
| // in the file PATENTS. All contributing project authors may | |
| // be found in the AUTHORS file in the root of the source tree. | |
| #include <strmif.h> | |
| #include <comdef.h> | |
| #include <control.h> | |
| #include <uuids.h> | |
| #include "graphutil.hpp" | |
| #include "makewebmcmdline.hpp" | |
| #include "memfile.hpp" | |
| #include <amvideo.h> | |
| #include <dvdmedia.h> | |
| #include <list> | |
| interface IVP8Encoder; | |
| class App | |
| { | |
| App(const App&); | |
| App& operator=(const App&); | |
| public: | |
| App(); | |
| int operator()(int, wchar_t*[]); | |
| private: | |
| CmdLine m_cmdline; | |
| GraphUtil::IFilterGraphPtr m_pGraph; | |
| int LoadGraph(); | |
| int SaveGraph(); | |
| int m_progress; | |
| int CreateMuxerGraph( | |
| bool bTwoPass, | |
| IPin* pDemuxVideo, | |
| IPin* pDemuxAudio, | |
| IBaseFilter** pMux); | |
| int CreateFirstPassGraph(IPin* pDemuxVideo, IPin** pEncoderOutpin); | |
| int RunGraph(IMediaSeeking* pSeek); | |
| static bool IsVPX(IPin*); | |
| static GUID GetSubtype(IPin*); | |
| GraphUtil::IBaseFilterPtr AddDemuxFilter( | |
| IBaseFilter*, | |
| const wchar_t*) const; | |
| GraphUtil::IBaseFilterPtr FindDemuxFilter( | |
| IBaseFilter*, | |
| const wchar_t*) const; | |
| GraphUtil::IBaseFilterPtr EnumDemuxFilters( | |
| IPin*, | |
| const wchar_t*) const; | |
| #if 0 | |
| bool ConnectVideo(IPin*, IPin*) const; | |
| HRESULT ConnectVideoConverter(IPin*, IPin*) const; | |
| #endif | |
| bool ConnectAudio(IPin*, IPin*) const; | |
| HRESULT TranscodeAudio(IPin*, IPin*) const; | |
| HRESULT TranscodeAudio( | |
| const AM_MEDIA_TYPE&, | |
| IPin*, | |
| IPin*, | |
| DWORD) const; | |
| HRESULT ConnectVorbisEncoder( | |
| const WAVEFORMATEX&, | |
| const AM_MEDIA_TYPE&, | |
| IPin*, | |
| IPin*) const; | |
| HRESULT ConnectVorbisEncoder(IPin*, IPin*) const; | |
| static void DumpPreferredMediaTypes( | |
| IPin*, | |
| const wchar_t*, | |
| void (*)(const AM_MEDIA_TYPE&)); | |
| static void DumpConnectionMediaType( | |
| IPin*, | |
| const wchar_t*, | |
| void (*)(const AM_MEDIA_TYPE&)); | |
| void DisplayProgress(IMediaSeeking*, bool); | |
| static void DumpVideoMediaType(const AM_MEDIA_TYPE&); | |
| static void DumpVideoInfoHeader(const VIDEOINFOHEADER&); | |
| static void DumpVideoInfoHeader2(const VIDEOINFOHEADER2&); | |
| static void DumpBitMapInfoHeader(const BITMAPINFOHEADER&); | |
| static void DumpAudioMediaType(const AM_MEDIA_TYPE&); | |
| static double GetFramerate(const AM_MEDIA_TYPE&); | |
| HRESULT SetVP8Options(IVP8Encoder*, const AM_MEDIA_TYPE*) const; | |
| const wchar_t* GetStatsFileName(); | |
| std::wstring m_stats_filename; | |
| MemFile m_stats_file; | |
| }; |