diff -r 000000000000 -r 71ca22bcf22a mmserv/thumbnailengine/TneProcessorInc/mp4parser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/thumbnailengine/TneProcessorInc/mp4parser.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Header for mp4parser.cpp +* +*/ + + + + +#ifndef __MP4PARSER_H__ +#define __MP4PARSER_H__ + +// INCLUDES + +#include "Parser.h" +#include + +// CONSTANTS +// MACROS +// DATA TYPES +// FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + + +// CLASS DECLARATION +class CTNEProcessorImpl; +// class CAmrFader; + +enum TFrameType +{ + EFrameTypeNone = 0, + EFrameTypeAudio, + EFrameTypeVideo +}; + +/** +* MP4 -format parser class +* ?other_description_lines +*/ +class CMP4Parser : public CParser +{ + +public: // Constructors and destructor + + /** + * C++ default constructor. + */ + CMP4Parser(); + + /** + * Two-phased constructor. + */ + + static CMP4Parser* NewL(CTNEProcessorImpl* aProcessor, RFile& aFileHandle); + + /** + * Destructor. + */ + ~CMP4Parser(); + +public: + + /** + * Reads information of next available packet in inserted input data + * @param aType Frame type + * @param aFrameLength Frame length in bytes + * @return TInt error code + */ + TInt GetNextFrameInformation(TFrameType& aType, TUint& aLength, TBool& aIsAvailable); + + + +public: // Functions from base classes + + /** + * From CParser Parser the stream header. + * @param aStreamParameters Common stream parameters + */ + TInt ParseHeaderL(CParser::TStreamParameters& aStreamParameters); + + /** + * From CParser Resets parser to initial state. + * @return TInt error code + */ + + TInt Reset(); + + /** + * From CParser Seek to optimal intra before given time + */ + + TInt SeekOptimalIntraFrame(TTimeIntervalMicroSeconds aStartTime, TInt aIndex); + + /** + * From CParser + * Gets the number of frames in current clip + */ + TInt GetNumberOfVideoFrames(); + + /** + * From CParser + * Gets the size of video frame at given index + */ + TInt GetVideoFrameSize(TInt aIndex); + + /** + * From CParser + * Gets the timestamp of video frame at given index + */ + TInt GetVideoFrameStartTime(TInt aIndex, TInt* iTimeStamp); + + /** + * From CParser + * Gets the type of video frame at given index + */ + TInt8 GetVideoFrameType(TInt aIndex); + + /** + * From CParser Retrieves average video frame rate of current clip + * @param aBitrate Average frame rate + * + * @return error code + */ + TInt GetVideoFrameRate(TReal& aFrameRate); + + + /** + * Read a number of frames of requested type from inserted data or file + * @param aDstBuffer Destination buffer + * @param aType Type of frame(s) to be read + * @param aNumRead Number of frames actually read + * @return TInt error code + */ + TInt ReadFrames(TDes8& aDstBuffer, TFrameType aType, TUint32& aNumRead, TUint32& aTimeStamp); + +private: + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(CTNEProcessorImpl* aProcessor, RFile& aFileHandle); + +private: // Internal constants + + // Stream source type + enum TStreamSource + { + ESourceNone = 0, // not set yet + ESourceFile, // reading from a file + ESourceUser // user of this object provides data + }; + +private: // Data + + // video processor instance + CTNEProcessorImpl *iProcessor; + + TStreamSource iStreamSource; + + mp4_u32 iVideoType; + + TUint iBytesRead; + + // RFile handle for + RFile iFileHandle; + + // The MP4 parser library handle + MP4Handle iMP4Handle; + + TFrameType iNextFrameType; + TUint iNextFrameLength; + + TBool iFirstRead; + TBool iFirstFrameInfo; + + // Max video frame length & AMR sample size, used for sanity checks to avoid crashes in case of corrupted input + TInt iMaxVideoFrameLength; + + }; + +#endif // __MP4PARSER_H__ + + +// End of File