videoeditorengine/h263decoder/inc/VedVolReader.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/inc/VedVolReader.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:  
+* Header for VOL header parser.
+*
+*/
+
+
+
+#ifndef __VEDVOLREADER_H__
+#define __VEDVOLREADER_H__
+
+
+//  INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <vedcommon.h>
+
+
+
+
+
+// DATA TYPES
+
+/**
+ * Structure for the Video Object Layer header data
+ */ 
+struct TVolHeader
+    {
+    TInt iProfileLevelId;     // Indicates the Level Id (0,1,2,3,4,8 or 9) of the Simple
+                              // Profile the Video Object conforms to
+    TInt iVoPriority;         // Priority assigned to the Video Object 
+                              // a value between 1(lowest)-7(highest).
+                              // If not in the bitstream, set to zero
+   
+    TInt iVoId;               // id of the Video Object 
+    TInt iVolId;              // id of the Video Object Layer 
+    TInt iRandomAccessibleVol;// set to 1 if all the VOPs in the stream are I-VOP.
+    TInt iPixelAspectRatio;   // see MPEG-4 visual spec. pp. 71
+
+    TInt iTimeIncrementResolution;
+                              // Resolution to interpret the time_increment 
+                              // fields in the VOP headers 
+
+    TInt iLumWidth;           // Frame width of the Y component in pixels 
+    TInt iLumHeight;          // Frame height of the Y component in pixels 
+
+    TUint8 iErrorResDisable;  // Flag ON if no resynchronization markers are
+                              // used inside frames. 
+                              // When OFF it doesn't mean they ARE used.
+    TUint8 iDataPartitioned;  // Flag indicating if data partitioning inside 
+                              // a VP is used or not.
+    TUint8 iReversibleVlc;    // flag indicating the usage of reversible 
+                              // VLC codes
+
+    // the following parameters concern the input video signal,
+    // see MPEG-4 visual spec. pp. 66-70, and "Note" in viddemux_mpeg.c 
+    // Not used in the current implementatnion.
+    TInt iVideoFormat;
+    TInt iVideoRange;
+    TInt iColourPrimaries;    
+    TInt iTransferCharacteristics;
+    TInt iMatrixCoefficients;
+
+    // the following parameters are used in the Video Buffering Verifier
+    // (Annex D) to monitor the input bit buffer, complexity, memory buffer
+    // used in the decoding process. The conformance of a stream can be checked
+    // using these parameters. 
+    // Not used in the current implementatnion. 
+    TUint32 iBitRate;
+    TUint32 iVbvBufferSize;
+    TUint32 iVbvOccupancy;
+
+    HBufC8* iUserData;        // User Data if available
+    };
+    
+
+
+// CLASS DECLARATION
+
+/**
+ * A class for parsing the Video Object Layer header
+ */
+class CVedVolReader : public CBase
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    IMPORT_C static CVedVolReader* NewL();
+
+    /**
+     * Destructor.
+     */
+    virtual ~CVedVolReader();
+    
+    /**
+     * Parses given Video Object Layer header
+     * @param aData Buffer from where to parse the header
+     * @return error code
+     */
+    IMPORT_C TInt ParseVolHeaderL(TDesC8& aData);
+    
+    /**
+     * Returns the time increment resolution that was read from the VOL header
+     * @return time increment resolution
+     */    
+    IMPORT_C TInt TimeIncrementResolution() const;
+    
+    /**
+     * Returns the width of the video that was read from the VOL header
+     * @return width
+     */  
+    IMPORT_C TInt Width() const;
+    
+    /**
+     * Returns the height of the video that was read from the VOL header
+     * @return height
+     */  
+    IMPORT_C TInt Height() const;
+    
+    /**
+     * Returns the Level Id of the Simple Profile the Video Object conforms to
+     * @return profile level Id
+     */  
+    IMPORT_C TInt ProfileLevelId() const;
+    
+    /**
+     * Returns the bitstream mode of the video
+     * @return bitstream mode
+     */  
+    IMPORT_C TVedVideoBitstreamMode BitstreamMode() const;
+    
+    /**
+     * Returns the size of the VOL header
+     * @return size of the header
+     */  
+    IMPORT_C TInt HeaderSize() const;
+
+private:
+
+    /**
+     * Structure for internal buffer of the header sequence
+     */
+    struct TSeqHeaderBuffer
+        {
+        TDesC8& iData;           // The actual data of the buffer
+        TInt    iGetIndex;       // Index of getting from the buffer 
+        TInt    iBitInOctet;	 // Bit index in the buffer
+        
+        TSeqHeaderBuffer(TDesC8& aData, TInt aGetIndex, TInt aBitInOctet) :
+            iData(aData), iGetIndex(aGetIndex), iBitInOctet(aBitInOctet) {}
+        };
+    
+    /**
+     * C++ default constructor.
+     */
+    CVedVolReader();
+    
+    /**
+     * By default Symbian OS constructor is private.
+     */
+    void ConstructL();
+    
+    /**
+     * Reads requested bits from given buffer
+     * @param aBuffer Buffer from where to read the bits
+     * @param aNumBits Amount of bits to read
+     * @param aFlush Discard the bits that were read
+     * @return The bits that were read
+     */
+    TUint32 ReadSeqHeaderBits(TSeqHeaderBuffer& aBuffer, TInt aNumBits, TBool aFlush);
+    
+    /**
+     * Reads user data from given buffer
+     * @param aBuffer Buffer from where to read the user data
+     */
+    void ReadUserDataL(TSeqHeaderBuffer& aBuffer);
+    
+    /**
+     * Checks what is the bit stream mode the video
+     * @param aErd Flag error resilience disable used
+     * @param aDp Flag data partitioned used
+     * @param aRvlc Flag reversible vlc used
+     * @return The bit stream mode
+     */
+    TVedVideoBitstreamMode CheckBitstreamMode(TUint8 aErd, TUint8 aDp, TUint8 aRvlc);
+
+private:
+
+    // Member variables
+    
+    static const TInt KMaxUserDataLength;       // The maximum allocated memory for 
+                                                // user data (UD). Only this much of the UD
+                                                // from the bitstream is stored
+                                                
+    static const TUint8 KMsbMask[8];            // Mask for extracting the needed bits
+    static const TUint8 KLsbMask[9];
+    
+    TVolHeader iHeader;                         // For storing the header data
+    
+    TVedVideoBitstreamMode iBitstreamMode;
+    TInt iHeaderSize;
+
+    };
+
+#endif // __VEDVOLREADER_H__
+