videoeditorengine/vedtranscoder/inc/ctrvideodecoderclient.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedtranscoder/inc/ctrvideodecoderclient.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,388 @@
+/*
+* 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 CTRVIDEODECODERCLIENT_H
+#define CTRVIDEODECODERCLIENT_H
+
+// INCLUDES
+#include <e32base.h>
+#include <devvideoplay.h>
+#include <devvideobase.h>
+#include <devvideostandardcustominterfaces.h>
+
+#include "ctrcommon.h"
+
+
+// FORWARD DECLARATIONS
+class MTRDevVideoClientObserver;
+class CCMRMediaBuffer;
+
+
+/**
+*  Video decoder client
+*  @lib TRANSCODER.LIB
+*/
+NONSHARABLE_CLASS(CTRVideoDecoderClient) : public CBase, public MMMFDevVideoPlayObserver, public MMmfVideoResourceObserver
+
+    {
+    public: // Constuctor / destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTRVideoDecoderClient* NewL(MTRDevVideoClientObserver& aObserver);
+
+        /**
+        * Destructor.
+        */
+        ~CTRVideoDecoderClient();
+
+        // Information methods
+        /**
+        * Checks codec support by MIME type
+        * @param aFormat MIME type
+        * @param aShortFormat MIME type (short version)
+        * @param aUid Uid of the codec to check
+        * @param aFallbackUid Fallback Uid incase the first one is not found
+        * @return TBool value: ETrue - givemn MIME type is supported; EFalse - no support; 
+        */
+        TBool SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid);
+
+        /**
+        * Gets codec info
+        * @param none
+        * @return none
+        */
+        void GetCodecInfoL();
+
+        /**
+        * 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);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Notifies the client that one or more new empty input buffers are available
+        * @param none
+        * @return none
+        */
+        void MdvpoNewBuffers();
+
+        /**
+        * From MMMFDevVideoPlayObserver. Returns a used input video picture back to the caller
+        * @param aPicture Video picture
+        * @return none
+        */
+        void MdvpoReturnPicture(TVideoPicture *aPicture);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Delivers supplemental information from a coded data unit
+        * @param aData Data, aTimestamp TimeStamp info, aPictureId Picture Id
+        * @return none
+        */
+        void MdvpoSupplementalInformation(const TDesC8 &aData, const TTimeIntervalMicroSeconds &aTimestamp, 
+                                          const TPictureId &aPictureId);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating a picture loss 
+        * without specifying the lost picture
+        * @param none
+        * @return none
+        */
+        void MdvpoPictureLoss();
+
+        /**
+        * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating the pictures that have been lost
+        * @param aPictures Array with picture Ids
+        * @return none
+        */
+        void MdvpoPictureLoss(const TArray< TPictureId > &aPictures);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating the loss of consecutive 
+        * macroblocks in raster scan order
+        * @param aFirstMacroblock First macroblock, aNumMacroblocks, Number of macroblocks, aPicture PictureId
+        * @return none
+        */
+        void MdvpoSliceLoss(TUint aFirstMacroblock, TUint aNumMacroblocks, const TPictureId &aPicture);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating a reference picture 
+        * selection request
+        * @param aSelectionData Selection data
+        * @return none
+        */
+        void MdvpoReferencePictureSelection(const TDesC8 &aSelectionData);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Called when a timed snapshot request has been completed
+        * @param aError Error, aPictureData Picture data, aPresentationTimestamp Presentation timestamp, aPictureId picture Id
+        * @return
+        */
+        void MdvpoTimedSnapshotComplete(TInt aError, TPictureData *aPictureData, 
+                                        const TTimeIntervalMicroSeconds &aPresentationTimestamp, const TPictureId &aPictureId);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Notifies the client that one or more new output pictures are available
+        * @param none
+        * @return none
+        */
+        void MdvpoNewPictures();
+
+        /**
+        * From MMMFDevVideoPlayObserver. Reports a fatal decoding or playback error
+        * @param aError Rin-time error
+        * @return none
+        */
+        void MdvpoFatalError(TInt aError);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Reports that DevVideoPlay initialization has completed
+        * @param aError Init error status
+        * @return none
+        */
+        void MdvpoInitComplete(TInt aError);
+
+        /**
+        * From MMMFDevVideoPlayObserver. Reports that the input video stream end has been reached and all pictures 
+        * have been processed
+        * @param none
+        * @return none
+        */
+        void MdvpoStreamEnd();
+
+        /**
+        * Returns used videopicture
+        * @param aPicture Video picture
+        * @return none
+        */
+        void ReturnPicture(TVideoPicture* aPicture);
+
+        /**
+        * Starts decoding
+        * @param none
+        * @return none
+        */
+        void StartL();
+
+        /**
+        * Stops decoding synchronously
+        * @param none
+        * @return none
+        */
+        void StopL();
+
+        /**
+        * Stops decoding asynchronously
+        * @param none
+        * @return none
+        */
+        void AsyncStopL();
+
+        /**
+        * Pauses decoding
+        * @param none
+        * @return none
+        */
+        void Pause();
+        
+        /**
+        * Resumes decoding
+        * @param none
+        * @return none
+        */
+        void ResumeL();
+        
+        /**
+        * Checks codec info
+        * @param aUid Decoder Uid
+        * @return TBool ETrue - accelerated codec; EFalse - non-accelerated codec
+        */
+        TBool CheckCodecInfoL(TUid aUid);
+
+        /**
+        * Initialize decoder client
+        * @param none
+        * @return none
+        */
+        void InitializeL();
+
+        /**
+        * Select decoder
+        * @param none
+        * @return none
+        */
+        void SelectDecoderL();
+
+        /**
+        * Send buffer
+        * @param aBuffer Media buffer
+        * @return none
+        */
+        void SendBufferL(CCMRMediaBuffer* aBuffer);
+
+        /**
+        * Write coded buffer
+        * @param aBuffer Media buffer
+        * @return none
+        */
+        void WriteCodedBufferL(CCMRMediaBuffer* aBuffer);
+
+        /**
+        * Returns a time estimate on long it takes to decode one frame with the current settings
+        * @param aInput Input video format
+        * @param aCodecType EH263 or EMpeg4
+        * @return TReal time estimate in seconds
+        */
+        TReal EstimateDecodeFrameTimeL(const TTRVideoFormat& aInput, TInt aCodecType);
+        
+        /**
+        * Checks if decoder supports scaling and enables scaling if supported.
+        * Disables scaling if aInputSize is equal to aOutputSize or scaling is not supported.
+        * @param aInputSize Source picture size
+        * @param aOutputSize Decoded picture size
+        * @return TBool ETrue if scaling is supported, EFalse otherwise
+        */
+        TBool SetDecoderScaling(TSize& aInputSize, TSize& aOutputSize);
+        
+        /**
+        * 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.
+        */
+        CTRVideoDecoderClient(MTRDevVideoClientObserver& aObserver);
+
+        /**
+        * Symbian 2nd phase constructor, can leave
+        */
+        void ConstructL();
+
+    private:
+        // Observer
+        MTRDevVideoClientObserver& iObserver;
+
+        // DevVideoPlay
+        CMMFDevVideoPlay* iDevVideoPlay;
+
+        // Decoder mime type
+        TBuf8<256> iMimeType;
+        
+        // Short version mime type
+        TBuf8<256> iShortMimeType;
+
+        // Uncompressed format
+        TUncompressedVideoFormat iUncompressedFormat;
+
+        // Compressed format
+        CCompressedVideoFormat* iCompresedFormat;
+
+        // HwDevice Uid
+        THwDeviceId iHwDeviceId;
+
+        // Video coded input buffer
+        TVideoInputBuffer* iInputBuffer;
+
+        // Decoded picture
+        TVideoPicture* iDecodedPicture;
+
+        // Uid of the selected codec
+        TUid iUid;
+        
+        // Fallback codec to use if the first one doesn't work
+        TUid iFallbackUid;
+
+        // Coded buffer
+        CCMRMediaBuffer* iCodedBuffer;
+        
+        // Codec type
+        TInt iCodecType;
+
+        // Codec level
+        TInt iCodecLevel;
+
+        // Buffer options
+        CMMFDevVideoPlay::TBufferOptions iBufferOptions;
+
+        // Fatal error code
+        TInt iFatalError;
+        
+        // Input format
+        TTRVideoFormat iInputFormat;
+
+        // Output format
+        TTRVideoFormat iOutputFormat;
+        
+        // Data unit type
+        TVideoDataUnitType iDataUnitType;
+        
+        // Stop
+        TBool iStop;
+        
+        // Pause
+        TBool iPause;
+        
+        // Last ts
+        TTimeIntervalMicroSeconds iLastTimestamp;
+        
+        // If selected decoder is accelerated or not
+        TBool iAcceleratedCodecSelected;
+        
+        // If scaling is used or not
+        TBool iScalingInUse;
+        
+        // Decoded picture size if scaling is used
+        TSize iScaledOutputSize;
+        
+        // If deblocking should be used when scaling
+        TBool iScalingWithDeblocking;
+
+        // Video resource handler custom interface
+        MMmfVideoResourceHandler* iVideoResourceHandlerCI;
+    };
+
+
+
+#endif  // CTRVIDEODECODERCLIENT_H