mmplugins/lib3gp/impl/inc/asyncfileparser.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmplugins/lib3gp/impl/inc/asyncfileparser.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,162 @@
+// Copyright (c) 2006-2009 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:
+//
+
+#ifndef __ASYNCFILEPARSER_H
+#define __ASYNCFILEPARSER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "mp4atom.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class RFile64;
+struct MP4HandleStruct;
+
+// CLASS DECLARATION
+
+/**
+*  Async file parser
+*/
+NONSHARABLE_CLASS(CFileAsyncParser) : public CActive
+    {
+	public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CFileAsyncParser* NewL( MP4HandleStruct* aHandle, RFile64& aFile );
+
+        /**
+        * Destructor.
+        */
+        ~CFileAsyncParser();
+    
+	public: // New functions
+
+        /**
+        * Reads audio frames from file asynchronously
+        * @since 3.1
+        * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes.
+        */
+        TInt ReadAudioFrames( mp4_u8 *buffer, mp4_i64 aPosition, mp4_u32 aBytesToRead );
+
+        /**
+        * Reads video frames from file asynchronously
+        * @since 3.1
+        * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes.
+        */
+        TInt ReadVideoFrame(  mp4_u8 *buffer, mp4_i64 aPosition, mp4_u32 aBytesToRead );
+
+	protected: // Functions from base classes
+        /**
+        * From CActive Cancels async request.
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Called when async request completes.
+        */
+	    void RunL();
+
+	private:
+        /**
+        * C++ default constructor.
+        */
+        CFileAsyncParser();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( MP4HandleStruct* aHandle, RFile64& aFile );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        TInt ReadDataAsync( mp4_u8 *buffer, mp4_i64 aPosition, mp4_u32 aBytesToRead );
+        
+        /**
+        * Return audio frames to observer
+        */
+		void ReturnAudioFrames();
+
+        /**
+        * Return video frame to observer
+        */
+        void ReturnVideoFrame();
+
+        /**
+        * Calculates audio framecount in buffer
+        */        
+        TInt CalculateAudioFrameCount();
+        
+	private:
+		// Handle to parsed file structure.
+		MP4HandleStruct* iHandle;
+		
+		// Disk buffer.
+		HBufC8* iDiskBuffer;
+		// Pointer to iDiskBuffer data
+		TPtr8 iDiskBufferPointer;
+		// Disk buffer size
+		TInt iReadBufferSize;		
+		// Position of last read Diskbuffer in file
+		TInt64 iCurrentDiskReadPosition;
+		// Position of last read inside iDiskBuffer.
+		TUint iCurrentBufferReadPosition;
+		// Whether on last parse request all data was found on internal buffer.
+		TBool iAllDataInMemory;
+		
+		// Audio parameters to be filled.
+		// Size of audio frame returned to client.
+		mp4_u32 iAudioSize;
+		// Number of audio frames in buffer.
+		mp4_u32 iReturnedAudioFrames;
+		// Audio frame presentation time in milliseconds from the beginning of the audio sequence.
+		mp4_u32 iAudioTimeStamp; 		
+		// 	Audio frame presentation time in timescale from the	beginning of the audio sequence
+		mp4_u32 iAudioTimeStamp2; 		
+	
+		// Video parameter to be filled.
+		// Size of video frame returned to client.
+		mp4_u32 iVideoSize;
+		// Whether returned video frame is keyframe or not.
+		mp4_bool iVideoKeyFrame;
+		// Video frame presentation time in milliseconds from the beginning of the video sequence.
+		mp4_u32 iVideoTimeStamp; 		
+		// Video frame presentation time in timescale from the	beginning of the video sequence
+		mp4_u32 iVideoTimeStamp2; 		
+		
+		// Read logic variables.
+		// Amount of bytes client wants to read
+		TInt iBytesToRead;
+		// Amount of bytes read.
+		TInt64 iBytesRead;
+		// Flag whether there is async writing going.
+	    TBool iAsyncReadOngoing;
+	    // Flag whether current read is audio.
+	    TBool iProcessingAudio;
+		// Write error code.
+	    TInt iError;
+
+        // Parsed file being read.
+        RFile64* iInputFile;
+		// Output buffer being written to
+		mp4_u8* iBuffer;
+};
+
+#endif  //__ASYNCFILEPARSER_H
+// End of File