os/mm/mmlibs/mmfw/Recogniser/src/parsers.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#ifndef PARSERS_H
sl@0
    17
#define PARSERS_H
sl@0
    18
sl@0
    19
#include "readers.h"
sl@0
    20
sl@0
    21
//
sl@0
    22
// Utility class for performing bit operations.
sl@0
    23
//
sl@0
    24
class TFlags
sl@0
    25
	{
sl@0
    26
public:
sl@0
    27
	TFlags()
sl@0
    28
	 : iFlags(0)
sl@0
    29
		{
sl@0
    30
		}
sl@0
    31
		
sl@0
    32
	void SetExtensionFlag(){ iFlags |= KBit0; }
sl@0
    33
	void SetBit(TUint32 aMask) { iFlags |= aMask; }
sl@0
    34
	
sl@0
    35
	TUint32 GetBitField(TUint32 aMask, TUint8 aRightShift = 0)
sl@0
    36
		{
sl@0
    37
		return ((iFlags & aMask) >> aRightShift);
sl@0
    38
		}
sl@0
    39
		
sl@0
    40
private:
sl@0
    41
	TUint32 iFlags;
sl@0
    42
	};
sl@0
    43
sl@0
    44
sl@0
    45
//
sl@0
    46
// An ID3 tag parser.
sl@0
    47
//
sl@0
    48
class TID3Parser
sl@0
    49
	{
sl@0
    50
public:
sl@0
    51
	static TBool ReadAndSkipID3L(CReader& aReader);
sl@0
    52
	};
sl@0
    53
	
sl@0
    54
sl@0
    55
//
sl@0
    56
// A raw-AAC audio file parser.
sl@0
    57
//
sl@0
    58
class TAACParser
sl@0
    59
	{
sl@0
    60
public:
sl@0
    61
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
    62
sl@0
    63
protected:
sl@0
    64
	TAACParser(CReader& aReader, TFlags& aFlags);
sl@0
    65
	void ParseL();
sl@0
    66
	TInt CheckForFrameHeaderL(TInt& aFrameLength);
sl@0
    67
	
sl@0
    68
private:
sl@0
    69
	CReader& iReader;
sl@0
    70
	TFlags& iFlags;
sl@0
    71
	};
sl@0
    72
sl@0
    73
sl@0
    74
//
sl@0
    75
// A raw-MP3 audio file parser.
sl@0
    76
//
sl@0
    77
class TMP3Parser
sl@0
    78
	{
sl@0
    79
public:
sl@0
    80
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
    81
sl@0
    82
protected:
sl@0
    83
	TMP3Parser(CReader& aReader, TFlags& aFlags);
sl@0
    84
	void ParseL();
sl@0
    85
	TInt CheckForFrameHeaderL(TInt& aFrameLength);
sl@0
    86
sl@0
    87
private:
sl@0
    88
	CReader& iReader;
sl@0
    89
	TFlags& iFlags;
sl@0
    90
	};
sl@0
    91
sl@0
    92
sl@0
    93
//
sl@0
    94
// An MPEG4 container file format parser.
sl@0
    95
//
sl@0
    96
#define KMPEG4BoxTitleLen		4
sl@0
    97
sl@0
    98
class TMPEG4Parser
sl@0
    99
	{
sl@0
   100
public:
sl@0
   101
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   102
sl@0
   103
protected:
sl@0
   104
	TMPEG4Parser(CReader& aReader, TFlags& aFlags);
sl@0
   105
	const TText8* MatchFileType(const TDesC& aExt);
sl@0
   106
	static TInt IsCompatibleBrand(TUint32 aBrand, TInt aStartPos = 0);
sl@0
   107
sl@0
   108
	// Parsing routines.
sl@0
   109
	void ParseL();
sl@0
   110
	void SkipCurrentBoxL();
sl@0
   111
	void ReadBoxHeaderL();
sl@0
   112
	void ReadFileTypeL();
sl@0
   113
	void ReadMovieL();
sl@0
   114
	void ReadTrackL();
sl@0
   115
	void ReadTrackHeaderL();
sl@0
   116
	void ReadMediaL();
sl@0
   117
	void ReadHandlerL();
sl@0
   118
			
sl@0
   119
private:
sl@0
   120
	// Data members.
sl@0
   121
	TUint32 iTitle;			// The title of the current box.
sl@0
   122
	TInt iBrandIndex;
sl@0
   123
	TBool iIsFinished;
sl@0
   124
	TInt64 iSize; 			// The current box's size.
sl@0
   125
	TBool iSizeIn32bit;
sl@0
   126
	CReader& iReader;
sl@0
   127
	TFlags& iFlags;
sl@0
   128
	TBool iVideoAssumed;
sl@0
   129
	};
sl@0
   130
sl@0
   131
sl@0
   132
//
sl@0
   133
// An MPEG2 container file format parser.
sl@0
   134
//
sl@0
   135
class TMPEG2Parser
sl@0
   136
	{
sl@0
   137
public:
sl@0
   138
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   139
sl@0
   140
protected:
sl@0
   141
	TMPEG2Parser(CReader& aReader, TFlags& aFlags);
sl@0
   142
	void ParseL();
sl@0
   143
	TBool NextStartCodeL();
sl@0
   144
	void ReadPackHeaderL();
sl@0
   145
	void SkipL();
sl@0
   146
	const TText8* MatchExtension(const TDesC& aExt);
sl@0
   147
	
sl@0
   148
private:
sl@0
   149
	CReader& iReader;
sl@0
   150
	TFlags& iFlags;
sl@0
   151
	};
sl@0
   152
sl@0
   153
sl@0
   154
//
sl@0
   155
// A Matroska container file format parser.
sl@0
   156
//
sl@0
   157
class TMatroskaParser
sl@0
   158
	{
sl@0
   159
public:
sl@0
   160
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   161
sl@0
   162
protected:
sl@0
   163
	TMatroskaParser(CReader& aReader, TFlags& aFlags);
sl@0
   164
	void ParseL();
sl@0
   165
	TUint64 ReadDataL(TBool aTurnOffHighestSetBit = EFalse);
sl@0
   166
	void ReadElementL(TUint64& aElementID, TInt64& aSize);
sl@0
   167
	TBool ReadSegmentL(TUint64& aNextID, TInt64& aNextSize);
sl@0
   168
	TBool ReadTrackL(TInt64 aTrackSize);
sl@0
   169
	const TText8* MatchExtension(const TDesC& aExt);
sl@0
   170
sl@0
   171
private:
sl@0
   172
	CReader& iReader;
sl@0
   173
	TFlags& iFlags;
sl@0
   174
	};
sl@0
   175
sl@0
   176
sl@0
   177
//
sl@0
   178
// A Windows Media ASF file format parser.
sl@0
   179
//
sl@0
   180
class TASFParser
sl@0
   181
	{
sl@0
   182
public:
sl@0
   183
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   184
sl@0
   185
protected:
sl@0
   186
	TASFParser(CReader& aReader, TFlags& aFlags);
sl@0
   187
	void ParseL();
sl@0
   188
	void ReadObjectL(TDes8& aGUID, TInt64& aSize);
sl@0
   189
	void ReadGUIDL(TDes8& aGUID);
sl@0
   190
	const TText8* MatchExtension(const TDesC& aExt, TBool aVideo);
sl@0
   191
	
sl@0
   192
private:
sl@0
   193
	CReader& iReader;
sl@0
   194
	TFlags& iFlags;
sl@0
   195
	};
sl@0
   196
	
sl@0
   197
sl@0
   198
//
sl@0
   199
// A RealMedia file format parser.
sl@0
   200
//
sl@0
   201
class TRMParser
sl@0
   202
	{
sl@0
   203
public:
sl@0
   204
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   205
sl@0
   206
protected:
sl@0
   207
	TRMParser(CReader& aReader, TFlags& aFlags);
sl@0
   208
	void ParseL();
sl@0
   209
	void ReadChunkHeaderL(TUint32& aObjectId, TUint32& aSize, TBool aFirstChunk = EFalse);
sl@0
   210
	void MatchExtension(const TDesC& aFileExt);
sl@0
   211
	TBool ReadMediaPropertiesL();
sl@0
   212
	
sl@0
   213
private:
sl@0
   214
	CReader& iReader;
sl@0
   215
	TFlags& iFlags;
sl@0
   216
	};
sl@0
   217
sl@0
   218
sl@0
   219
//
sl@0
   220
// A RAM file parser.
sl@0
   221
//
sl@0
   222
class TRAMParser
sl@0
   223
	{
sl@0
   224
public:
sl@0
   225
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   226
	};
sl@0
   227
sl@0
   228
sl@0
   229
//
sl@0
   230
// An SDP file parser.
sl@0
   231
//
sl@0
   232
class TSDPParser
sl@0
   233
	{
sl@0
   234
public:
sl@0
   235
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   236
	};
sl@0
   237
sl@0
   238
sl@0
   239
//
sl@0
   240
// An XPS file parser.
sl@0
   241
//
sl@0
   242
class TXPSParser
sl@0
   243
	{
sl@0
   244
public:
sl@0
   245
	static void DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch);
sl@0
   246
	};
sl@0
   247
sl@0
   248
#endif