videoeditorengine/vedtranscoder/inc/ctrvideoencoderclient.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedtranscoder/inc/ctrvideoencoderclient.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,471 @@
+/*
+* 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:  
+* Video decoder client.
+*
+*/
+
+
+
+#ifndef CTRVIDEOENCODERCLIENT_H
+#define CTRVIDEOENCODERCLIENT_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <devvideobase.h>   // Common data types
+#include <CCMRMediaSink.h>  // CmmfBuffer
+#include <e32cmn.h>         // TRequestStatus
+#include <devvideorecord.h>
+
+// When the flag SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN is NOT defined,
+// Buffer management interface is specified in Symbian header
+#ifndef SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN
+#include <devvideostandardcustominterfaces.h>
+#else
+#include <devvideostandardcustominterfaces.h>
+#include "buffermanagementci.h"
+#endif
+
+#include "ctrcommon.h"
+#include "ctrsettings.h"
+
+#ifndef SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN
+/** Buffer Management Custom Interface UID */
+const TUid KMmfVideoBuffermanagementUid = { 0x10204bea };
+#endif
+
+// FORWARD DECLARATIONS
+class MTRDevVideoClientObserver;
+
+
+// CONSTANTS
+
+
+/**
+*  Video encoder client
+*  @lib TRANSCODER.LIB
+*  @since 3.1
+*/
+class TUidAndRate
+    {
+    public:
+        // Encoder Uid
+        TUid iUid;
+
+        // Max supported framerate
+        TReal iMaxRate;
+    };
+
+/**
+*  Video encoder client
+*  @lib TRANSCODER.LIB
+*  @since 3.1
+*/
+NONSHARABLE_CLASS(CTRVideoEncoderClient) : public CBase, public MMMFDevVideoRecordObserver, public MMmfVideoBufferManagementObserver,
+                                           public MMmfVideoResourceObserver
+    {
+    public: // Constuctor / destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTRVideoEncoderClient* NewL(MTRDevVideoClientObserver& aObserver);
+
+        /**
+        * Destructor.
+        */
+        ~CTRVideoEncoderClient();
+
+        // Information methods
+        /**
+        * Check codec's support by MIME type
+        * @param aFormat Codec MIME type
+        * @param aShortFormat Codec MIME type (short version)
+        * @param aUid Uid of the codec to check
+        * @param aFallbackUid Fallback Uid incase the first codec is not found
+        * @return TBool: ETrue - supports, EFalse - Does not support
+        */
+        TBool SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid);
+
+        /**
+        * Sets codec parameters
+        * @param aCodecType Codec type
+        * @param aCodecLevel Codec level
+        * @param aInputFormat Input video format
+        * @param aOutputFormat Output video format
+        * @return none
+        */
+        void SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, 
+                                 const TTRVideoFormat& aOutputFormat);
+
+        /**
+        * Sets real-time operation
+        * @param aRealTime Real-time operatiopn
+        * @return none
+        */
+        void SetRealTime(TBool aRealTime);
+
+        /**
+        * From MMMFDevVideoRecordObserver. Returns a used input video picture back to the caller. 
+        * The picture memory can be re-used or freed
+        * @param aPicture Video Picture
+        * @return none
+        */
+        void MdvroReturnPicture(TVideoPicture* aPicture);
+
+        /**
+        * From MMMFDevVideoRecordObserver. Signals that the supplemental info send request has completed
+        * @param none
+        * @return none
+        */
+        void MdvroSupplementalInfoSent();
+
+        /**
+        * From MMMFDevVideoRecordObserver. Notifies the client that one or more new output buffers are available
+        * @param none
+        * @return none
+        */
+        void MdvroNewBuffers();
+
+        /**
+        * From MMMFDevVideoRecordObserver. Reports a fatal encoding or capturing error 
+        * @param aError Run-time error
+        * @return none
+        */
+        void MdvroFatalError(TInt aError);
+
+        /**
+        * From MMMFDevVideoRecordObserver. Reports that DevVideoRecord initialization has completed
+        * @param aError Init error
+        * @return none
+        */
+        void MdvroInitializeComplete(TInt aError);
+
+        /**
+        * From MMMFDevVideoRecordObserver. Reports that the input video data end has been reached and all pictures 
+        * have been processed
+        * @param none
+        * @return none
+        */
+        void MdvroStreamEnd();
+
+        /**
+        * Encode picture
+        * @param aPicture Video picture to encode
+        * @return none
+        */
+        void EncodePictureL(TVideoPicture* aPicture);
+
+        /**
+        * Starts encoding
+        * @param none
+        * @return none
+        */
+        void StartL();
+
+        /**
+        * Stops encoding synchronously
+        * @param none
+        * @return none
+        */
+        void StopL();
+
+        /**
+        * Stops encoding asynchronously
+        * @param none
+        * @return none
+        */
+        void AsyncStopL();
+
+        /**
+        * Sets target bitrate
+        * @param aBitRate bitrate
+        * @return none
+        */
+        void SetBitRate(TUint aBitRate);
+
+        /**
+        * Sets target frame rate 
+        * @param aFrameRate Target frame rate 
+        * @return none
+        */
+        void SetFrameRate(TReal& aFrameRate);
+
+        /**
+        * Sets Channel bit-error rate
+        * @param aErrorRate error rate
+        * @return none
+        */
+        void SetChannelBitErrorRate(TReal aErrorRate);
+
+        /**
+        * Sets Video coding options
+        * @param aOptions Coding options
+        * @return none
+        */
+        void SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions);
+
+        /**
+        * Gets current video bitrate
+        * @param none
+        * @return Video bitrate
+        */
+        TUint GetVideoBitRateL();
+
+        /**
+        * Gets Current frame rate
+        * @param none
+        * @return Frame rate 
+        */
+        TReal GetFrameRateL();
+
+        /**
+        * Sets Input / source frame rate 
+        * @param aFrameRate Input / Source frame rate 
+        * @return none
+        */
+        void SetInputFrameRate(TReal aFrameRate);
+
+        /**
+        * Initialize encoder
+        * @param none 
+        * @return none
+        */
+        void InitializeL();
+
+        /**
+        * Select encoder
+        * @param none 
+        * @return none 
+        */
+        void SelectEncoderL();
+        
+        /**
+        * Get Coding standard / specific output (VOL / VOS / VO Header)
+        * @param none 
+        * @return Coding standard / specific output (VOL / VOS / VO Header) 
+        */
+        HBufC8* GetCodingStandardSpecificInitOutputLC();
+
+        /**
+        * Select encoder
+        * @param none 
+        * @return none 
+        */
+        void UseDataTransferOptimizationL();
+
+        /**
+        * Informs about new buffers available in DevVideoPlay queue
+        * @param none 
+        * @return none 
+        */
+        void MmvbmoNewBuffers();
+
+        /**
+        * Release buffers request
+        * @param none 
+        * @return none 
+        */
+        void MmvbmoReleaseBuffers();
+        
+        /**
+        * Gets target video picture buffer
+        * @param none 
+        * @return Video picture
+        */
+        TVideoPicture* GetTargetVideoPictureL();
+        
+        /**
+        * Sets Random access point
+        * @param none 
+        * @return none 
+        */
+        void SetRandomAccessPoint();
+        
+        /**
+        * Returns a time estimate on long it takes to encode one frame with the current settings
+        * @param aOutput Output video format
+        * @param aCodecType EH263 or EMpeg4
+        * @return TReal time estimate in seconds
+        */
+        TReal EstimateEncodeFrameTimeL(const TTRVideoFormat& aOutput, TInt aCodecType);
+        
+        /**
+        * Pauses encoding
+        * @param none
+        * @return none
+        */
+        void Pause();
+
+        /**
+        * Resumes encoding
+        * @param none
+        * @return none
+        */
+        void Resume();
+        
+        /**
+        * Enable / Disable resource observer
+        * @param aEnable ETrue: Observer is enabled, EFalse observer is disabled
+        * @return none
+        */
+        void EnableResourceObserver(TBool aEnable);
+        
+        /**
+        * From MMmfVideoResourceObserver. Indicates that a media device has lost its resources
+        * @param aMediaDevice UID for the media device that lost resources
+        * @return none
+        */
+        void MmvroResourcesLost(TUid aMediaDevice);
+        
+        /**
+        * From MMmfVideoResourceObserver. Indicates that a media device has regained its resources
+        * @param aMediaDevice UID for the media device that regained resources
+        * @return none
+        */
+        void MmvroResourcesRestored(TUid aMediaDevice);
+
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CTRVideoEncoderClient(MTRDevVideoClientObserver& aObserver);
+
+        /**
+        * Symbian 2nd phase constructor, can leave
+        */
+        void ConstructL();
+
+        /**
+        * Checks codec info
+        * @param aUid Decoder Uid
+        * @return TBool ETrue - accelerated codec; EFalse - non-accelerated codec
+        */
+        TBool CheckCodecInfoL(TUid aUid);
+        
+    private:
+        // Observer
+        MTRDevVideoClientObserver& iObserver;
+
+        // DevVideoRecord
+        CMMFDevVideoRecord* iDevVideoRecord;
+
+        // Encoder mime type
+        TBuf8<256> iMimeType;
+        
+        // Short version mime type
+        TBuf8<256> iShortMimeType;
+
+        // Uid of the selected codec
+        TUid iUid;
+        
+        // Fallback codec to use if the first codec doesn't work
+        TUid iFallbackUid;
+
+        // Max frame rate 
+        TReal iMaxFrameRate;
+
+        // Uncompressed format
+        TUncompressedVideoFormat iUncompressedFormat;
+
+        // Compressed format
+        CCompressedVideoFormat* iCompresedFormat;
+
+        // Picture size
+        TSize iPictureSize;
+
+        // Rate control options
+        TRateControlOptions iRateControlOptions;
+
+        // Coding options
+        TTRVideoCodingOptions iCodingOptions;
+
+        // HwDevice Uid
+        THwDeviceId iHwDeviceId;
+
+        // MPEG4 VOL header
+        TBufC8<256> iVolHeader;
+
+        // Output buffer type
+        TInt iBufferType;
+
+        // Output media buffer
+        CCMRMediaBuffer* iOutputMediaBuffer;
+
+        // Request status
+        TRequestStatus* iStat;
+
+        // Real-time processing
+        TBool iRealTime;
+
+        // State
+        TInt iState;
+
+        // Src frame rate
+        TReal iSrcRate;
+
+        // Output data type
+        TInt iOutputDataType;
+
+        // Codec level
+        TInt iCodecLevel;
+
+        // Codec type
+        TInt iCodecType;
+
+        // Error rate 
+        TReal iErrorRate;
+
+        // Fatal error code
+        TInt iFatalError;
+        
+        // Vol data sending status
+        TBool iVolHeaderSent;
+        
+        // Vol header status 
+        TBool iRemoveHeader;
+        
+        // Vol header length
+        TUint iVolLength;
+        
+        // Rate control options
+        TRateControlOptions iRateOptions;
+        
+        // Rate setting
+        TBool iBitRateSetting;
+        
+        // Buffer Management CI
+        MMmfVideoBufferManagement* iVideoBufferManagementCI;
+        
+        // Last ts
+        TTimeIntervalMicroSeconds iLastTimestamp;
+        
+        // If selected encoder is accelerated or not
+        TBool iAcceleratedCodecSelected;
+        
+        // ETrue if random access point was requested
+        TBool iSetRandomAccessPoint;
+        
+        // Number of H.264 SPS/PPS NAL units from encoder
+        TInt iNumH264SPSPPS;
+        
+        // Video resource handler custom interface
+        MMmfVideoResourceHandler* iVideoResourceHandlerCI;
+    };
+
+
+
+#endif  // CTRVIDEOENCODERCLIENT_H