mmlibs/mmfw/Recogniser/src/rmparser.cpp
author hgs
Tue, 02 Nov 2010 12:13:59 +0000
changeset 5 b220a9341636
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
#include "parsers.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
static const TUint32 KRMFileHeaderId = MAKE_INT32('.', 'R', 'M', 'F');
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
static const TUint32 KRMMediaPropertiesId = MAKE_INT32('M', 'D', 'P', 'R');
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
static const TInt KRMMaxMimeTypeLen = 255;	// Specified by an 8-bit field
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#define KRMExtensionBit			KBit0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#define KRMFileHeaderBit		KBit1
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#define KRMMediaPropertiesBit	KBit2
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#define KRMVideoBit				KBit3
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#define KRMVideoMask			0x08	// 0000 1000
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#define KRMConfidenceMask 		0x07	// 0000 0111
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
// This truth table maps the following flags to a confidence level.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
// -----------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
// A: MediaProperties chunk found
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
// B: FileHeader signature found
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
// C: Extension recognised.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
// A B C -> Confidence
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
// ===================
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
// 0 0 0 -> ENotRecognized
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
// 0 0 1 -> EPossible
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
// 0 1 0 -> EPossible (EPossible beacuse the header is ASCII and may match plaintext)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
// 0 1 1 -> ECertain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
// 1 0 0 -> ENotRecognised (Can't have MediaProperties without FileHeader)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
// 1 0 1 -> ENotRecognised (Can't have MediaProperties without FileHeader)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
// 1 1 0 -> EProbable
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
// 1 1 1 -> ECertain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
static const TInt KRMFlagsToConfidence[] =
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	KConfNotRecognised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	KConfPossible,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	KConfPossible,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	KConfCertain,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
	KConfNotRecognised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	KConfNotRecognised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	KConfProbable,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	KConfCertain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
// Constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
TRMParser::TRMParser(CReader& aReader, TFlags& aFlags)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
 :	iReader(aReader),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	iFlags(aFlags)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
// The main RealMedia parsing function.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
void TRMParser::DoRecognise(const TDesC& aFileExt, CReader& aReader, TMatch& aMatch)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	TFlags flags;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	TRMParser parser(aReader, flags);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
	parser.MatchExtension(aFileExt);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
	TRAP_IGNORE(parser.ParseL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	TInt confIndex = flags.GetBitField(KRMConfidenceMask);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	aMatch.iConfidence = KRMFlagsToConfidence[confIndex];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	if (aMatch.iConfidence != KConfNotRecognised)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
		aMatch.iMime = (flags.GetBitField(KRMVideoMask) ? KMimeRM_V : KMimeRM_A);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
// Match the file extension given by AppArc against known
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
// extensions for this format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
void TRMParser::MatchExtension(const TDesC& aFileExt)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	TBool match;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	match = (aFileExt.MatchF(TPtrC(KExtRMF)) != KErrNotFound);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	match |= (aFileExt.MatchF(TPtrC(KExtRM)) != KErrNotFound);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	if (match)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
		iFlags.SetExtensionFlag();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
// RealMedia files are divided into chunks. Chunks begins with a 32-bit identifier
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
// which is followed by a 32-bit unsigned field that specifies the size of the chunk
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
// in bytes. Since the size field is unsigned, it must be cast to a TInt64 in order
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
// for SeekL() to work reliably. The size field also includes the length of the chunk
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
// identifier and the length of the size field itself, so these must be subtracted
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
// from any seek operation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
void TRMParser::ParseL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	TUint32 objectId;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	TUint32 size;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	const TInt KChunkHeaderSize = sizeof(TUint32) * 2; // sizeof objectId and size fields.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
	// The first chunk must be the FileHeader.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	ReadChunkHeaderL(objectId, size, ETrue);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	// Assume there's video content if we only have buffer data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	if (iReader.Type() == CReader::EBuffer)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
		iFlags.SetBit(KRMVideoBit);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	iReader.SeekL(TInt64(size - KChunkHeaderSize));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
	// The other chunks can occur in any order.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	TBool complete = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	do
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
		ReadChunkHeaderL(objectId, size);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
		if (objectId == KRMMediaPropertiesId)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
			iFlags.SetBit(KRMMediaPropertiesBit);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
			if (ReadMediaPropertiesL())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
				// Exit early if the video flag has been set by ReadMediaPropertiesL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
				complete = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
			// Skip over the unneeded chunk.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
			iReader.SeekL(TInt64(size - KChunkHeaderSize));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	while (!complete);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
// Reads the chunk identifier and size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
void TRMParser::ReadChunkHeaderL(TUint32& aObjectId, TUint32& aSize, TBool aFirstChunk)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
	iReader.Read32L(aObjectId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	if (aFirstChunk)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
		if (aObjectId == KRMFileHeaderId)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
			iFlags.SetBit(KRMFileHeaderBit);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
			User::Leave(KErrCorrupt);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
	iReader.Read32L(aSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	if (aSize == 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
		User::Leave(KErrCorrupt);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
// The MediaProperties chunk describes a stream in the RM file. There
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
// may be several MediaProperties chunks in one file. In order to determine
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
// if video content is present we must look at the MIME-type that may
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
// be present in each MediaProperties chunk.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
// Return ETrue if this function set the video bit.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
TBool TRMParser::ReadMediaPropertiesL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
	const TInt KBytesToFieldSize = 30;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
	// ObjectId and size fields have already been read.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
	TBool setVideo = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
	TUint16 objectVersion;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
	iReader.Read16L(objectVersion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	if (objectVersion == 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
		TUint8 fieldSize;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
		TBuf8<KRMMaxMimeTypeLen> mimeType;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
		_LIT8(KVideoStar, "video/*");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
		// Skip unneeded information.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
		iReader.SeekL(KBytesToFieldSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
		// Read stream_name_size so we can skip over it.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
		iReader.ReadByteL(fieldSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
		iReader.SeekL(fieldSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
		// Read the mime_type_size. Because it's 8-bit, it has a max length of 256 bytes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
		iReader.ReadByteL(fieldSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
		mimeType.SetLength(fieldSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
		iReader.ReadBytesL(mimeType);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
		// Now check if the mime-type field indicates video content.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
		if (mimeType.MatchF(KVideoStar) != KErrNotFound)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
			iFlags.SetBit(KRMVideoBit);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
			setVideo = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
		// Read the type_specific_len so we can skip over it.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
		TUint32 typeSpecificLen;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
		iReader.Read32L(typeSpecificLen);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
		iReader.SeekL(TInt64(typeSpecificLen));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	return setVideo;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238