diff -r 951a5db380a0 -r e0b5df5c0969 videoeditorengine/vedengine/videoprocessor/inc/videoprocessor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/videoprocessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1003 +0,0 @@ -/* -* 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 file for video processor. -* -*/ - - -#ifndef __VIDEOPROCESSOR_H__ -#define __VIDEOPROCESSOR_H__ - -// INCLUDES -#ifndef _H263DAPI_H_ -#include "h263dapi.h" -#endif - -#include "videodecoder.h" -#include "vedVideoclip.h" - - -// FORWARD DECLARATIONS -class CActiveQueue; -class CStatusMonitor; -class CMovieProcessorImpl; -class CVideoEncoder; -class CVedH263Dec; -class CMPEG4Timer; -class CVedAVCEdit; - -#include "CTRTranscoderObserver.h" -#include "CTRTranscoder.h" -#include "CTRCommon.h" -#include -#include "CTRVideoPictureSink.h" - -enum TTransitionColor -{ - EColorNone = 0, - EColorBlack, - EColorWhite, - EColorTransition -}; - -enum TTransitionPosition -{ - EPositionNone = 0, - EPositionStartOfClip, - EPositionEndOfClip -}; - - -// Threshold for using postfilter. Assumption is that CIF is encoded with high bitrate => no need for postfilter -const TInt KThrWidthForPostFilter = 176; - -// CLASS DEFINITIONS - - -// Observer class for thumbnail generation -class MThumbnailObserver -{ -public: - void NotifyThumbnailReady(TInt aError); -}; - -class MTimerObserver -{ -public: - virtual void MtoTimerElapsed(TInt aError) = 0; - -}; - - -// Timer class to use when waiting for encoding to complete -class CCallbackTimer : public CActive -{ - -public: - - /** - * Two-phased constructor. - */ - static CCallbackTimer* NewL(MTimerObserver& aObserver); - - /** - * Destructor. - */ - ~CCallbackTimer(); - -public: - - /** - * Set timer - * - * @param aDuration Duration - */ - void SetTimer(TTimeIntervalMicroSeconds32 aDuration); - - - /** - * Query whether timer is active - * - * @return TRUE if timer is pending - */ - inline TBool IsPending() { return iTimerRequestPending; } - - /** - * Cancel timer - */ - void CancelTimer(); - -private: - - /** - * C++ default constructor. - */ - CCallbackTimer(MTimerObserver& aObserver); - - /** - * Symbian 2nd phase constructor - */ - void ConstructL(); - -protected: - - /** - * From CActive. - * @param - * @return void - */ - void RunL(); - - /** - * From CActive. - * @param - * @return void - */ - void DoCancel(); - - /** - * From CActive. - * @param - * @return void - */ - TInt RunError(TInt aError); - - -private: // Data - - MTimerObserver& iObserver; - - RTimer iTimer; - - TBool iTimerCreated; - TBool iTimerRequestPending; -}; - - - -class CVideoProcessor : public CVideoDecoder, public MVideoRenderer, - public MTRTranscoderObserver, public MTRVideoPictureSink, - public MCMRMediaSink, public MTimerObserver - -{ -public: // constants - enum TErrorCode - { - EInternalAssertionFailure = -1400, - EDecoderFailure = -1401 - }; - - enum TTimingSource - { - ETemporalReference = 0, - ETimeStamp - }; - - enum TDecoderFrameOperation - { - EDecodeAndWrite = 1, - EDecodeNoWrite, - EWriteNoDecode, - ENoDecodeNoWrite - }; - - enum TTranscoderMode - { - EDecodeOnly = 1, - EFull, - EFullWithIM, - EUndefined - }; - -public: // Data structures - struct TStreamParameters - { - TUint iWidth; - TUint iHeight; - TInt64 iPicturePeriodNsec; - TUint iIntraFrequency; - TUint iReferencePicturesNeeded; // 0 = disable RPS - TUint iNumScalabilityLayers; - TUint iLayerFrameRates[8]; // frames per 256 sec - TTimingSource iTiming; - }; - - -private: // Data structures - - // structure to store information about frames - // in decoding/transcoding progress - struct TFrameInformation - { - TTranscoderMode iTranscoderMode; - - TInt iFrameNumber; - TInt64 iTimeStamp; // timestamp in ticks - TBool iEncodeFrame; // ETrue if frame will be encoded - TBool iKeyFrame; - - // transition frame info - TBool iTransitionFrame; // is this a transition frame? - TBool iFirstTransitionFrame; // is this the first transition frame in this instance? - TTransitionPosition iTransitionPosition; - TTransitionColor iTransitionColor; - TInt iTransitionFrameNumber; - - TBool iModificationApplied; // has intermediate modification been done ? - TBool iRepeatFrame; // ETrue for second instance of a color transition frame - - }; - -public: // New functions - - /** - * Two-phased constructor. - * - * @param anInputQueue Input active queue - * @param aStreamParameters Stream parameters - * @param aProcessor Video processor object - * @param aStatusMonitor Status monitor object - * @param aEncoder Video encoder object - * @param aPriority Active object priority - */ - - static CVideoProcessor* NewL(CActiveQueue *anInputQueue, - CVideoProcessor::TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority=EPriorityStandard); - - - /** - * Destructor. - */ - ~CVideoProcessor(); - -public: // Functions from base classes - - /** - * From CActive Active object running method - */ - void RunL(); - - /** - * From CActive Active object cancelling method - */ - void DoCancel(); - - /** - * From CActive Active object error handling method - */ - TInt RunError(TInt aError); - - /** - * From CDecoder Start video decoding - */ - void Start(); - - /** - * From CDecoder Stop video decoding - */ - void Stop(); - - /** - * From CDataProcessor Notifies that input stream has ended - */ - void StreamEndReached(TAny *aUserPointer); - - /** - * From CDataProcessor Notifies that new input queue blocks are available - */ - void InputDataAvailable(TAny *aUserPointer); - - /** - * From MVideoRenderer Renders a decoded frame - */ - TInt RenderFrame(TAny* aFrame); - - /** - * From MTRTranscoderObserver - */ - void MtroInitializeComplete(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroFatalError(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroReturnCodedBuffer(CCMRMediaBuffer* aBuffer); - - /** - * From MTRTranscoderObserver - */ - void MtroSetInputFrameRate(TReal& aRate); - - /** - * From MTRTranscoderObserver - */ - void MtroAsyncStopComplete(); - - /** - * From MTRTranscoderObserver - */ - void MtroSuspend(); - - /** - * From MTRTranscoderObserver - */ - void MtroResume(); - - /** - * From MTRVideoPictureSink - */ - void MtroPictureFromTranscoder(TTRVideoPicture* aPicture); - - /** - * From MCMRMediaSink - */ - void WriteBufferL(CCMRMediaBuffer* aBuffer); - - /** - * From MCMRMediaSink - */ - TInt SetVideoFrameSize(TSize aSize); - - /** - * From MCMRMediaSink - */ - TInt SetAverageVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetMaxVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetAverageAudioBitRate(TInt aBitRate); - - /** - * From MTimerObserver - */ - void MtoTimerElapsed(TInt aError); - -public: // New functions - - /** - * Generates a thumbnail image - * - * @param aYUVDataPtr For returning the thumbnail - * @param aFrameIndex Frame index of the thumbnail image - * -1 means best thumbnail is generated - * @param aStartFrameIndex Frame index of the start frame (last intra before thumbnail) - * - * @return Error code - */ - - /** - * Starts generating a thumbnail image - * - * @param aThumbObserver Observer class - * @param aFrameIndex Frame index of the thumbnail image - * -1 means best thumbnail is generated - * @param aStartFrameIndex Frame index of the start frame (last intra before thumbnail) - * @param aFactor Pointer to transcode factor structure - * - * @return Error code - */ - TInt ProcessThumb(MThumbnailObserver* aThumbObserver, TInt aFrameIndex, - TInt aStartFrameIndex, TVedTranscodeFactor* aFactor); - - TInt FetchThumb(TUint8** aYUVDataPtr); - - /** - * Gets the frame number of the current frame - * - */ - TInt GetFrameNumber() { return iFrameNumber; }; - - /** - * Keeps track whether the clip was resolution transcoded - * - */ - inline TInt GetChangeResolution() const { return iFullTranscoding; }; - - /* - * Checks whether the resynch bit is set if set then resets to zero - * - * @return TBool - */ - TBool CheckVosHeaderL(TPtrC8& aBuf); - - /** - * Gets the transcode factor from the current clip - * @param aFactor For returning the transcode factor - * @return error code - */ - TInt GetTranscodeFactorL(TVedTranscodeFactor& aFactor); - - /* - * Writes a delayed frame, i.e. a frame which has been buffered - * since transcoder has unprocesessed frames that must be written - * before this frame - */ - void WriteDelayedFrameL(); - - /* - * Checks if there are any frames waiting to be encoded inside transcoder - * @return TBool - */ - TBool IsEncodeQueueEmpty(); - - /* - * Calculates encoding delay based on what kind of frame is - * next in the encoding queue - * - * @return Delay in microseconds - */ - TInt GetEncodingDelay(); - - /* - * Checks if the next frame in processing queue - * is being encoded - * - * @return TBool result - */ - TBool IsNextFrameBeingEncoded(); - - /* - * Gets MPEG-4 VOS header size in bytes (from encoder) - * - * @return TInt VOS size - */ - TInt GetVosHeaderSize(); - -private: // internal methods - - /** - * C++ default constructor. - * - * @param anInputQueue Input active queue - * @param aStreamParameters Stream parameters - * @param aProcessor Video processor object - * @param aStatusMonitor Status monitor object - * @param aEncoder Video encoder object - * @param aPriority Active object priority - */ - CVideoProcessor(CActiveQueue *anInputQueue, - TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority); - - - /** - * Symbian 2nd phase constructor - */ - void ConstructL(); - - /** - * Processes one input video frame - * - * @return ETrue If the current clip has been - * processed entirely, EFalse if not - */ - TBool ProcessFrameL(); - - /** - * Processes the second frame of a color transition double frame - */ - TBool Process2ndColorTransitionFrameL(); - - /** - * Read one frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TInt ReadFrame(); - - /** - * Reads a H.263 frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadH263Frame(); - - /** - * Reads a MPEG-4 frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadMPEG4Frame(); - - /** - * Reads an AVC frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadAVCFrame(); - - /** - * Checks if a frame has "good" or "legible" quality - * - * @param aYUVDataPtr Pointer to the frame to be checked - * - * @return 1 if frame quality is OK, 0 otherwise - */ - TInt CheckFrameQuality(TUint8* aYUVDataPtr); - - /** - * Apply color effect on a frame - * - * @param aColorEffect Effect to be used - * @param aYUVDataPtr Pointer to the frame - * @param aColorToneYUV for extracting the UV values - * @return void - */ - void ApplySpecialEffect(TInt aColorEffect, TUint8* aYUVDataPtr, - TInt aColorToneU, TInt aColorToneV); - - /** - * Convert frame operation enumeration to TInt - * - * @param aFrameOperation Frame operation - * - * @return Frame operation as TInt - */ - TInt TFrameOperation2TInt(TDecoderFrameOperation aFrameOperation); - - /** - * Convert color effect enumeration to TInt - * - * @param aColorEffect Color effect - * - * @return Color effect as TInt - */ - TInt TColorEffect2TInt(TVedColorEffect aColorEffect); - - /** - * Determines transition effect parameters - * - * @param aTransitionEffect Output: ETrue if transition effect is to be applied - * @param aStartOfClipTransition ETrue if starting transition is to be applied - * @param aEndOfClipTransition ETrue if ending transition is to be applied - * @param aStartTransitionColor Color for starting transition - * @param aEndTransitionColor Color for ending transition - * - * @return Error code - */ - TInt DetermineClipTransitionParameters(TInt& aTransitionEffect,TInt& aStartOfClipTransition, - TInt& aEndOfClipTransition,TTransitionColor& aStartTransitionColor,TTransitionColor& aEndTransitionColor); - - - /** - * Applies fading transition effect to YUV frame - * - * @param aYUVPtr Pointer to the frame - * @param aTransitionPosition 1 = start transition, 2 = end transition - * @param aTransitionColor Transition color to be used (EColorWhite/EColorBlack/EColorTransition) - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplyFadingTransitionEffect(TUint8* aYUVPtr, TTransitionPosition aTransitionPosition, - TTransitionColor aTransitionColor, TInt aTransitionFrameNumber); - - /** - * Applies blending transition effect between YUV frames - * - * @param aYUVPtr1 Pointer to the frame 1 - * @param aYUVPtr2 Pointer to the frame 2 - * @param aRepeatFrame True for the second instance of two frames to be blended - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplyBlendingTransitionEffect(TUint8* aYUVPtr1,TUint8* aYUVPtr2, TInt aRepeatFrame, - TInt aTransitionFrameNumber); - - - /** - * Applies sliding transition effect between YUV frames - * - * @param aYUVPtr1 Pointer to the frame 1 - * @param aYUVPtr2 Pointer to the frame 2 - * @param aRepeatFrame True for the second instance of two frames to be blended - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplySlidingTransitionEffect(TUint8* aYUVPtr1,TUint8* aYUVPtr2, TVedMiddleTransitionEffect aVedMiddleTransitionEffect, - TInt aRepeatFrame, TInt aTransitionFrameNumber); - - /** - * Get the start transition info of the next clip - * - * @return void - */ - void GetNextClipTransitionInfo(); - - /* - * Resolution Transcoder - * Determine if the resolution transcoding will apply to the current clip - * - */ - TBool DetermineResolutionChange(); - - /* - * - * Determine if frame rate needs to be changed for the current clip - * - */ - TBool DetermineFrameRateChange(); - - /* - * - * Determine if bitrate needs to be changed for the current clip - * - */ - TBool DetermineBitRateChange(); - - /* - * Calculate the duration of current frame - * - * @param aFrameNumber frame number - * - * @return Frame duration in ticks - */ - TInt GetFrameDuration(TInt aFrameNumber); - - /* - * Decode frame using vedh263decoder - * - * @param aOperation Operation - * @param aModeChanged ETrue if compressed domain transcoding is neede - * @param aFrameSizeInBytes Return value, coded output frame size in bytes - * @param aVosHeaderSize Return value, size of VOS header in bytes - */ - void DecodeFrameL(TInt aOperation, TBool aModeChanged, TInt& aFrameSizeInBytes); - - /* - * Create and initialize transcoder - * - * @param aInputType Input video type - * @param aMode Transcoder operational mode to be used - * - */ - void CreateAndInitializeTranscoderL(TVedVideoType aInputType, CTRTranscoder::TTROperationalMode aMode); - - /* - * Determines if compressed domain transcoding is needed - * - */ - TBool GetModeChangeL(); - - /* - * Processes a thumbnail frame - * - * @param aFirstFrame ETrue if the first thumbnail frame is being processed - */ - void ProcessThumb(TBool aFirstFrame); - - /* - * Calculate the number of transition frames - * - * @param aStartCutTime Start cut time - * @param aEndCutTime End cut time - */ - void GetNumberOfTransitionFrames(TTimeIntervalMicroSeconds aStartCutTime, - TTimeIntervalMicroSeconds aEndCutTime); - - /* - * Set parameters needed to process a transition frame - * - * @param aIncludedFrameNumber Ordinal counting from the first included frame number - * @param aDecodeFrame ETrue if this frame must be decoded in order to apply end transition - */ - void SetTransitionFrameParams(TInt aIncludedFrameNumber, TBool& aDecodeFrame); - - /* - * Sets output codec parameters - * - * aMimeType Output mime type - */ - void SetOutputVideoCodecL(const TPtrC8& aMimeType); - - /* - * Generates bitstream for a not coded frame - * to be used in color transitions - */ - void GenerateNotCodedFrameL(); - - /* - * Reads a frame from input queue and writes it to transcoder - * - */ - void ReadAndWriteThumbFrame(); - - /* - * Does thumbnail finalization, stops processing and informs observer - * - * aError Error code for observer - */ - void FinalizeThumb(TInt aError); - - /* - * Writes a frame to output file - * - * @param aBuf Buffer containing the frame - * @param aDurationInTicks Frame duration in ticks - * @param aFrameNumber Frame number - * @return ETrue if clip end was written - */ - TBool WriteFrameToFileL(TPtr8& aBuf, TInt aDurationInTicks, TInt aFrameNumber); - - /* - * Writes a frame to transcoder - * - * @param aFrameNumber Frame number - * @param aKeyFrame ETrue for a keyframe - * @param aVolHeaderInBuffer ETrue if frame buffer contains MPEG-4 VOL header - */ - void WriteFrameToTranscoderL(TInt aFrameNumber, TBool aKeyFrame, TBool aVolHeaderInBuffer); - - /* - * Handles a decoded thumbnail frame received from transcoder - * - * @param aPicture Pointer to received picture - */ - void HandleThumbnailFromTranscoder(TTRVideoPicture* aPicture); - - /* - * Handles a decoded "decode-only" frame received from transcoder - * - * @param aPicture Pointer to received picture - * @param aIndex Index of decoded frame to iFrameInfoArray - */ - void HandleDecodeOnlyFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex); - - /* - * Handles a decoded transition frame (intermediate frame) received from transcoder - * - * @param aPicture Pointer to received picture - * @param aIndex Index of decoded frame to iFrameInfoArray - */ - void HandleTransitionFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex); - - /* - * Inserts AVC/MPEG-4 decoder specific info data in front of internal coded frame buffer - * - */ - void InsertDecoderSpecificInfoL(); - -private: // internal constants - enum TDataFormat - { - EDataUnknown = 0, - EDataH263, - EDataMPEG4, - EDataAVC - }; - - -private: // data - CActiveQueue *iQueue; // input data queue - TBool iReaderSet; // have we been set as reader? - CStatusMonitor *iMonitor; // status monitor object - CMovieProcessorImpl *iProcessor; - - CVedH263Dec *iDecoder; // H.263/MPEG-4 decoder - - TUint iVideoWidth, iVideoHeight; // video picture dimensions - TInt64 iPicturePeriodNsec; // one PCF tick period in nanoseconds - TDataFormat iDataFormat; // the stream data format - TUint iIntraFrequency; // intra picture frequency (intras per 256 sec) - TUint iReferencePicturesNeeded; // number of reference pictures needed - - TBool iFirstFrameFlag; // flag for decoder: is this the first frame? - - TDecoderFrameOperation iFrameOperation; - - TInt iNumberOfIncludedFrames; - - TBool iDecoding; // are we decoding? - TBool iStreamEnd; // has stream end been reached? - TBool iEncoderResetPending; // is the encoder being reseted - - TPtr8 *iBlock; // queue block - TUint iBlockPos; // current block position - TUint8 *iDataBuffer; // data buffer for the current compressed frame - TUint iBufferLength; // buffer total length - TUint iDataLength; // amount of data in buffer - TUint iCurrentFrameLength; // the length of the current frame in the buffer - - TUint8 *iFrameBuffer; // Concatenated YUV data for decoded frame - - TUint8 *iOutVideoFrameBuffer; // data buffer for the output compressed frame - TInt iOutVideoFrameBufferLength; // buffer total length - TInt iOutDataLength; // amount of data in buffer - TPtr8 iWriteDes; // writing descriptor for encoding - TInt iFrameNumber; // current frame number - TInt iNumberOfFrames; // no. of frames in current clip - TInt iPreviousFrameIncluded; // ETrue if previous frame was included in output movie - TInt iTrPrevious; - - // transition effects - TInt iTransitionEffect; // is transition effect to be applied? - TInt iStartOfClipTransition; // is starting transition effect to be applied ? - TInt iEndOfClipTransition; // is ending transition effect to be applied ? - - TInt iStartNumberOfTransitionFrames; // number of frames in transition - TInt iEndNumberOfTransitionFrames; // number of frames in transition - TInt iTransitionFrameNumber; - TInt iNextTransitionNumber; - - TInt iFirstFrameInRange; // is the current frame the first to be included in output movie - TInt iFirstIncludedFrameNumber; // number of first included frame - TTransitionColor iStartTransitionColor; // color for starting transition - TTransitionColor iEndTransitionColor;// color for ending transition - - // number of preceding I frame (for end-of-clip trans.)this number is relative of start-of-clip - TInt iLastIntraFrameBeforeTransition; //The last intra frame before transition effect takes place. - - TTimingSource iTiming; - - // for transition effect - blending and sliding - TInt iFrameDuration; - TBool iRepeatFrame; - TInt64 iTimeStamp; - TUint8 *iOrigPreviousYUVBuffer; - TUint8 *iColorTransitionBuffer; - - CMPEG4Timer *iMPEG4Timer; // Stores MPEG-4 timing information - - CTRTranscoder *iTransCoder; - CCMRMediaBuffer* iMediaBuffer; - - TBool iTranscoderInitPending; // is transcoder init in progress ? - TBool iDecodePending; // is decode in progress ? - TBool iTranscoderStarted; // has transcoder been started ? - TBool iFrameToEncode; // should current frame be encoded ? (: could be changed to local for ProcessFrame) - - TBool iTransitionFrame; - TBool iFirstTransitionFrame; - TTransitionPosition iTransitionPosition; - TTransitionColor iTransitionColor; - - // for color toning - TInt iFirstFrameQp; // QP for first MPEG4 frame, used for color toning - - TBool iFullTranscoding; // Flag to indicate whether current clip needs to be fully - // transcoded (decode & encode) - - TBool iThumbnailMode; // True if we are generating a thumbnail frame - - TInt iThumbFrameIndex; // index of thumbnail to be generated, >= 0 means a specific frame, - // < 0 means the first "good" or "legible" frame - TInt iThumbFrameNumber; - TInt iFramesToSkip; // for searching a good thumbnail - - MThumbnailObserver* iThumbObserver; // observer for thumbnail operation - - HBufC8* iDecoderSpecificInfo; // decoder specific info header read from input stream, to be sent to transcoder - TBool iDecoderSpecificInfoSent; // True if decoder specific info has been sent to transcoder - - HBufC8* iOutputVolHeader; // VOL header read from encoder, to be inserted in the first - // encoded frame buffer - - TBool iOutputVolHeaderWritten; // True if VOL/AVC header has been written to output bitstream - - RArray iFrameInfoArray; // array for storing info about frames in progress - - TTranscoderMode iTranscoderMode; // current transcoder operation mode - - // used & max frame size, and info if size can be arbitrary - TSize iMaxOutputResolution; - TBool iArbitrarySizeAllowed; - - // max allowed frame rate - TReal32 iMaxOutputFrameRate; - - // target and max allowed bit rate - TInt iOutputBitRate; - TInt iMaxOutputBitRate; - - // Mime type for encoded data - TBuf8<256> iOutputMimeType; - - TBool iDelayedWrite; // True if a frame has to be stored for later writing since - // there are frames inside the transcoder that have to be written - // before this frame - HBufC8* iDelayedBuffer; // buffer for storing the frame - TInt64 iDelayedTimeStamp; // timestamp - TBool iDelayedKeyframe; // is it a keyframe - - TInt iTimeStampIndex; // index for reading stored timestamps in case of color transition - TBool iFirstColorTransitionFrame; // True if we are processing the first frame of a - // 'doubled' frame in color transitions - - TInt iTimeStampOffset; // offset to be added to timestamps, got from processor - - CCallbackTimer* iTimer; // timer for waiting encoding to complete - - TBool iStreamEndRead; - - TBool iProcessingComplete; - - TInt iInputMPEG4ProfileLevelId; // profile-level id for MPEG-4 input - - // Timer timeout, depends on codec and resolution - TUint iMaxEncodingDelay; - - TInt iNumThumbFrameSkips; // number of frame skip cycles done to get a - // a good thumbnail - - TTimeIntervalMicroSeconds iPreviousTimeStamp; // timestamp of previous frame - - TInt iSkippedFrameNumber; // frame number of skipped frame - - TInt64 iCutInTimeStamp; // timestamp of cut-in point, needed in color transitions - - TBool iDecodingSuspended; // flag for suspended decoding - - HBufC8* iNotCodedFrame; // buffer for not coded frame - - TInt iInputTimeIncrementResolution; // MPEG-4 time increment resolution from input clip - - TBool iFirstFrameAfterTransition; // True for first frame after start transition - - TBool iFirstRead; // True for first read frame - - TBool iThumbDecoded; // flag for indicating when a thumb has been decoded, - // needed in AVC thumbnail generation - - TInt iInputAVCLevel; // level of input AVC clip - - TInt iFrameLengthBytes; // number of bytes used for NAL length in input - TInt iThumbFramesToWrite; // number of thumb frames to write to transcoder - - CVedAVCEdit* iAvcEdit; // AVC editing instance - - TBool iEncodeUntilIDR; // Flag for encoding until IDR - - TBool iIsThumbFrameBeingCopied; // True if thumbnail frame has been sent for - // decoding, but MtroReturnCodedBuffer hasn't been called - - TInt iModifiedFrameNumber; // frame number modification for AVC decoder, - // used with color transitions - - TInt iMaxItemsInProcessingQueue; // Maximum number of frames kept in transcoder - // processing queue - - TInt iLastWrittenFrameNumber; // number of last written frame - - TInt iDelayedFrameNumber; // number of delayed frame - - TBool iInitializing; // True when initialisation is ongoing - TVedVideoBitstreamMode iInputStreamMode; //MPEG-4 bitstream mode in input clip -}; - -#endif // __VIDEOPROCESSOR_H__ - -// End of File