VobSubFileRipper.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:5k
- /*
- * Copyright (C) 2003-2005 Gabest
- * http://www.gabest.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Make; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- */
- #pragma once
- #include <afxtempl.h>
- #include "..decssVobFile.h"
- #include "VobSubFile.h"
- #pragma pack(push)
- #pragma pack(1)
- typedef struct
- {
- WORD perm_displ : 2;
- WORD ratio : 2;
- WORD system : 2;
- WORD compression : 2;
- WORD mode : 1;
- WORD letterboxed : 1;
- WORD source_res : 2;
- WORD cbrvbr : 2;
- WORD line21_2 : 1;
- WORD line21_1 : 1;
- } vidinfo;
- typedef struct
- {
- BYTE vob, cell;
- DWORD tTime, tOffset, tTotal;
- DWORD start, end;
- int iAngle;
- bool fDiscontinuity;
- } vc_t;
- typedef struct
- {
- int nAngles;
- CArray<vc_t> angles[10];
- int iSelAngle;
- RGBQUAD pal[16];
- WORD ids[32];
- } PGC;
- typedef struct VSFRipperData_t
- {
- CSize vidsize;
- vidinfo vidinfo;
- CArray<PGC> pgcs;
- int iSelPGC;
- bool fResetTime, fClosedCaption, fForcedOnly;
- bool fClose, fBeep, fAuto; // only used by the UI externally, but may be set through the parameter file
- bool fCloseIgnoreError;
- CUIntArray selvcs;
- CMap<BYTE, BYTE, bool, bool> selids;
- void Reset();
- void Copy(struct VSFRipperData_t& rd);
- } VSFRipperData;
- typedef struct {__int64 start, end; DWORD vc;} vcchunk;
- #pragma pack(pop)
- // note: these interfaces only meant to be used internally with static linking
- //
- // IVSFRipperCallback
- //
- [uuid("9E2EBB5C-AD7C-452f-A48B-38685716AC46")]
- interface IVSFRipperCallback : public IUnknown
- {
- STDMETHOD (OnMessage) (LPCTSTR msg) PURE;
- STDMETHOD (OnProgress) (double progress /*0->1*/) PURE;
- STDMETHOD (OnFinished) (bool fSucceeded) PURE;
- };
- // IVSFRipperCallbackImpl
- #ifndef QI
- #define QI(i) (riid == __uuidof(i)) ? GetInterface((i*)this, ppv) :
- #endif
- class IVSFRipperCallbackImpl : public CUnknown, public IVSFRipperCallback
- {
- protected:
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv)
- {
- return
- QI(IVSFRipperCallback)
- __super::NonDelegatingQueryInterface(riid, ppv);
- }
- // IVSFRipperCallback
- STDMETHODIMP OnMessage(LPCTSTR msg) {return S_FALSE;}
- STDMETHODIMP OnProgress(double progress /*0->1*/) {return S_FALSE;}
- STDMETHODIMP OnFinished(bool fSucceeded) {return S_FALSE;}
- public:
- IVSFRipperCallbackImpl() : CUnknown(NAME("IVSFRipperCallbackImpl"), NULL) {}
- };
- //
- // IVSFRipper
- //
- [uuid("69F935BB-B8D0-43f5-AA2E-BBD0851CC9A6")]
- interface IVSFRipper : public IUnknown
- {
- STDMETHOD (SetCallBack) (IVSFRipperCallback* pCallback) PURE;
- STDMETHOD (LoadParamFile) (CString fn) PURE;
- STDMETHOD (SetInput) (CString infn) PURE;
- STDMETHOD (SetOutput) (CString outfn) PURE;
- STDMETHOD (GetRipperData) (VSFRipperData& rd) PURE;
- STDMETHOD (UpdateRipperData) (VSFRipperData& rd) PURE;
- STDMETHOD (Index) () PURE;
- STDMETHOD (IsIndexing) () PURE;
- STDMETHOD (Abort) (bool fSavePartial) PURE;
- };
- class CVobSubFileRipper : public CVobSubFile, protected CAMThread, public IVSFRipper
- {
- private:
- bool m_fThreadActive, m_fBreakThread, m_fIndexing;
- enum {CMD_EXIT, CMD_INDEX};
- DWORD ThreadProc();
- bool Create();
- //
- typedef enum {LOG_INFO, LOG_WARNING, LOG_ERROR} log_t;
- void Log(log_t type, LPCTSTR lpszFormat, ...);
- void Progress(double progress);
- void Finished(bool fSucceeded);
- //
- CCritSec m_csAccessLock;
- CString m_infn, m_outfn;
- CVobFile m_vob;
- VSFRipperData m_rd;
- bool LoadIfo(CString fn);
- bool LoadVob(CString fn);
- bool LoadChunks(CArray<vcchunk>& chunks), SaveChunks(CArray<vcchunk>& chunks);
- //
- CCritSec m_csCallback;
- CComPtr<IVSFRipperCallback> m_pCallback;
- public:
- CVobSubFileRipper();
- virtual ~CVobSubFileRipper();
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
- // IVSFRipper
- STDMETHODIMP SetCallBack(IVSFRipperCallback* pCallback);
- STDMETHODIMP LoadParamFile(CString fn);
- STDMETHODIMP SetInput(CString infn);
- STDMETHODIMP SetOutput(CString outfn);
- STDMETHODIMP GetRipperData(VSFRipperData& rd);
- STDMETHODIMP UpdateRipperData(VSFRipperData& rd);
- STDMETHODIMP Index();
- STDMETHODIMP IsIndexing();
- STDMETHODIMP Abort(bool fSavePartial);
- };