sl@0: // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifndef PARSERS_H sl@0: #define PARSERS_H sl@0: sl@0: #include "readers.h" sl@0: sl@0: // sl@0: // Utility class for performing bit operations. sl@0: // sl@0: class TFlags sl@0: { sl@0: public: sl@0: TFlags() sl@0: : iFlags(0) sl@0: { sl@0: } sl@0: sl@0: void SetExtensionFlag(){ iFlags |= KBit0; } sl@0: void SetBit(TUint32 aMask) { iFlags |= aMask; } sl@0: sl@0: TUint32 GetBitField(TUint32 aMask, TUint8 aRightShift = 0) sl@0: { sl@0: return ((iFlags & aMask) >> aRightShift); sl@0: } sl@0: sl@0: private: sl@0: TUint32 iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // An ID3 tag parser. sl@0: // sl@0: class TID3Parser sl@0: { sl@0: public: sl@0: static TBool ReadAndSkipID3L(CReader& aReader); sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A raw-AAC audio file parser. sl@0: // sl@0: class TAACParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TAACParser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: TInt CheckForFrameHeaderL(TInt& aFrameLength); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A raw-MP3 audio file parser. sl@0: // sl@0: class TMP3Parser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TMP3Parser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: TInt CheckForFrameHeaderL(TInt& aFrameLength); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // An MPEG4 container file format parser. sl@0: // sl@0: #define KMPEG4BoxTitleLen 4 sl@0: sl@0: class TMPEG4Parser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TMPEG4Parser(CReader& aReader, TFlags& aFlags); sl@0: const TText8* MatchFileType(const TDesC& aExt); sl@0: static TInt IsCompatibleBrand(TUint32 aBrand, TInt aStartPos = 0); sl@0: sl@0: // Parsing routines. sl@0: void ParseL(); sl@0: void SkipCurrentBoxL(); sl@0: void ReadBoxHeaderL(); sl@0: void ReadFileTypeL(); sl@0: void ReadMovieL(); sl@0: void ReadTrackL(); sl@0: void ReadTrackHeaderL(); sl@0: void ReadMediaL(); sl@0: void ReadHandlerL(); sl@0: sl@0: private: sl@0: // Data members. sl@0: TUint32 iTitle; // The title of the current box. sl@0: TInt iBrandIndex; sl@0: TBool iIsFinished; sl@0: TInt64 iSize; // The current box's size. sl@0: TBool iSizeIn32bit; sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: TBool iVideoAssumed; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // An MPEG2 container file format parser. sl@0: // sl@0: class TMPEG2Parser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TMPEG2Parser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: TBool NextStartCodeL(); sl@0: void ReadPackHeaderL(); sl@0: void SkipL(); sl@0: const TText8* MatchExtension(const TDesC& aExt); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A Matroska container file format parser. sl@0: // sl@0: class TMatroskaParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TMatroskaParser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: TUint64 ReadDataL(TBool aTurnOffHighestSetBit = EFalse); sl@0: void ReadElementL(TUint64& aElementID, TInt64& aSize); sl@0: TBool ReadSegmentL(TUint64& aNextID, TInt64& aNextSize); sl@0: TBool ReadTrackL(TInt64 aTrackSize); sl@0: const TText8* MatchExtension(const TDesC& aExt); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A Windows Media ASF file format parser. sl@0: // sl@0: class TASFParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TASFParser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: void ReadObjectL(TDes8& aGUID, TInt64& aSize); sl@0: void ReadGUIDL(TDes8& aGUID); sl@0: const TText8* MatchExtension(const TDesC& aExt, TBool aVideo); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A RealMedia file format parser. sl@0: // sl@0: class TRMParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: sl@0: protected: sl@0: TRMParser(CReader& aReader, TFlags& aFlags); sl@0: void ParseL(); sl@0: void ReadChunkHeaderL(TUint32& aObjectId, TUint32& aSize, TBool aFirstChunk = EFalse); sl@0: void MatchExtension(const TDesC& aFileExt); sl@0: TBool ReadMediaPropertiesL(); sl@0: sl@0: private: sl@0: CReader& iReader; sl@0: TFlags& iFlags; sl@0: }; sl@0: sl@0: sl@0: // sl@0: // A RAM file parser. sl@0: // sl@0: class TRAMParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: }; sl@0: sl@0: sl@0: // sl@0: // An SDP file parser. sl@0: // sl@0: class TSDPParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: }; sl@0: sl@0: sl@0: // sl@0: // An XPS file parser. sl@0: // sl@0: class TXPSParser sl@0: { sl@0: public: sl@0: static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch); sl@0: }; sl@0: sl@0: #endif