mmserv/metadatautility/Src/MetaDataParserID3v2.cpp
branchRCL_3
changeset 15 ab526b8cacfb
parent 0 71ca22bcf22a
child 19 095bea5f582e
equal deleted inserted replaced
13:bea5e7625e42 15:ab526b8cacfb
    75 // -----------------------------------------------------------------------------
    75 // -----------------------------------------------------------------------------
    76 //
    76 //
    77 CMetaDataParserID3v2* CMetaDataParserID3v2::CreateID3v2ParserL(
    77 CMetaDataParserID3v2* CMetaDataParserID3v2::CreateID3v2ParserL(
    78 	CMetaDataSource& aSource )
    78 	CMetaDataSource& aSource )
    79     {
    79     {
       
    80     return CreateID3v2ParserL( aSource, 0 );
       
    81     }
       
    82 
       
    83 // -----------------------------------------------------------------------------
       
    84 // CMetaDataParserID3v2::CreateID3v2ParserL
       
    85 // Two-phased constructor.
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 CMetaDataParserID3v2* CMetaDataParserID3v2::CreateID3v2ParserL(
       
    89 	CMetaDataSource& aSource, TUint aOffset )
       
    90     {
    80 #ifdef _DEBUG
    91 #ifdef _DEBUG
    81 	RDebug::Print(_L("CMetaDataParserID3v2::CreateID3v2ParserL"));
    92 	RDebug::Print(_L("CMetaDataParserID3v2::CreateID3v2ParserL"));
    82 #endif
    93 #endif
    83 	TInt version = VersionL(aSource);
    94 	TInt version = VersionL(aSource, aOffset);
    84 
    95 
    85 	CMetaDataParserID3v2* parser = NULL;
    96 	CMetaDataParserID3v2* parser = NULL;
    86 	switch ( version )
    97 	switch ( version )
    87 		{
    98 		{
    88 		case 2:
    99 		case 2:
    95 			parser = STATIC_CAST( CMetaDataParserID3v2*, CMetaDataParserID3v24::NewL(aSource) );
   106 			parser = STATIC_CAST( CMetaDataParserID3v2*, CMetaDataParserID3v24::NewL(aSource) );
    96 			break;
   107 			break;
    97 		default:	// KErrNotFound
   108 		default:	// KErrNotFound
    98 			break;
   109 			break;
    99 		}
   110 		}
       
   111 	
       
   112 	if( parser )
       
   113 	    {
       
   114 	    parser->SetID32Offset( aOffset );
       
   115 	    }
       
   116 	
   100 	return parser;
   117 	return parser;
   101     }
   118     }
   102 
   119 
   103 // Destructor
   120 // Destructor
   104 CMetaDataParserID3v2::~CMetaDataParserID3v2()
   121 CMetaDataParserID3v2::~CMetaDataParserID3v2()
   158 	// choose if want to parse from descriptor
   175 	// choose if want to parse from descriptor
   159 	if(iFrameDataSize < KParseFromMemory) // 1Mb
   176 	if(iFrameDataSize < KParseFromMemory) // 1Mb
   160 		{
   177 		{
   161 		iTag = HBufC8::NewL(iFrameDataSize);
   178 		iTag = HBufC8::NewL(iFrameDataSize);
   162 		TPtr8 des( iTag->Des() );
   179 		TPtr8 des( iTag->Des() );
   163 		iSource->ReadL(0, des);
   180 		iSource->ReadL(iID32Offset, des);
   164 		
   181 		
   165 		iSourceDes = CMetaDataSourceDescriptor::NewL(des);
   182 		iSourceDes = CMetaDataSourceDescriptor::NewL(des);
   166 		iSource = iSourceDes;
   183 		iSource = iSourceDes;
   167 		iParseFromDescriptor = ETrue;
   184 		iParseFromDescriptor = ETrue;
   168 		}
   185 		}
   520 // -----------------------------------------------------------------------------
   537 // -----------------------------------------------------------------------------
   521 // CMetaDataParserID3v2::VersionL
   538 // CMetaDataParserID3v2::VersionL
   522 // -----------------------------------------------------------------------------
   539 // -----------------------------------------------------------------------------
   523 //
   540 //
   524 TInt CMetaDataParserID3v2::VersionL(
   541 TInt CMetaDataParserID3v2::VersionL(
   525 	CMetaDataSource& aSource )
   542 	CMetaDataSource& aSource, TUint aOffset )
   526 	{
   543 	{
   527 	TInt size = 0;
   544 	TInt size = 0;
   528 	aSource.Size( size );
   545 	aSource.Size( size );
   529 	if ( size < KID3v2HeaderLength )
   546 	if ( size < KID3v2HeaderLength )
   530 		{
   547 		{
   531 		// This isn't ID3v2
   548 		// This isn't ID3v2
   532 		return KErrNotFound;
   549 		return KErrNotFound;
   533 		}
   550 		}
   534 
   551 
   535 	TBuf8<KID3v2HeaderLength> header;
   552 	TBuf8<KID3v2HeaderLength> header;
   536 	aSource.ReadL( header );
   553 	aSource.ReadL( aOffset, header );
   537 	// ID3v2 header consists of following parts:
   554 	// ID3v2 header consists of following parts:
   538     // - identifier "ID3", 3 bytes
   555     // - identifier "ID3", 3 bytes
   539     // - version, 2 bytes
   556     // - version, 2 bytes
   540     // - flags, 1 byte
   557     // - flags, 1 byte
   541     // - data length, 4 bytes
   558     // - data length, 4 bytes