--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/VideoEditorCommon/inc/VeiTitleClipGenerator.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,586 @@
+/*
+* 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:
+*
+*/
+
+
+
+#ifndef __VEITITLECLIPGENERATOR_H__
+#define __VEITITLECLIPGENERATOR_H__
+
+#include <e32base.h>
+
+#include <VedVideoClipGenerator.h>
+
+/*
+ * UID of this generator. The Uids are only used to identify generators
+ * in UI, the Engine does not use Uids for any purpose.
+ */
+#define KUidTitleClipGenerator TUid::Uid(0x00000002)
+
+
+// Forward declarations
+
+class CVeiTitleClipGenerator;
+//class CVeiTitleClipMainTitleFrameOperation;
+//class CVeiTitleClipScrollerFrameOperation;
+class CVeiTitleClipImageDecodeOperation;
+class CFbsBitmap;
+class CBitmapScaler;
+class CImageDecoder;
+class CFont;
+
+// Enumerations
+
+/**
+ * Title clip style.
+ */
+enum TVeiTitleClipVerticalAlignment
+ {
+ EVeiTitleClipVerticalAlignmentTop,
+ EVeiTitleClipVerticalAlignmentBottom,
+ EVeiTitleClipVerticalAlignmentCenter
+ };
+
+/**
+ * Title clip justification.
+ */
+enum TVeiTitleClipHorizontalAlignment
+ {
+ EVeiTitleClipHorizontalAlignmentLeft,
+ EVeiTitleClipHorizontalAlignmentRight,
+ EVeiTitleClipHorizontalAlignmentCenter
+ };
+
+/**
+ * Title clip transition.
+ */
+enum TVeiTitleClipTransition
+ {
+ EVeiTitleClipTransitionNone = 0,
+ EVeiTitleClipTransitionScrollLeftToRight,
+ EVeiTitleClipTransitionScrollRightToLeft,
+ EVeiTitleClipTransitionScrollTopToBottom,
+ EVeiTitleClipTransitionScrollBottomToTop,
+ EVeiTitleClipTransitionFade
+ };
+
+
+
+/**
+ * Observer for title clip generator.
+ */
+class MVeiTitleClipGeneratorObserver
+ {
+public:
+ /**
+ * Notifies that the title clip generator has finished loading and
+ * preparing the background image.
+ *
+ * @param aGenerator generator that caused the event
+ * @param aError error code
+ */
+ virtual void NotifyTitleClipBackgroundImageLoadComplete(CVeiTitleClipGenerator& aGenerator, TInt aError) = 0;
+ };
+
+/**
+ * Title clip generator.
+ */
+class CVeiTitleClipGenerator : public CVedVideoClipGenerator
+ {
+public:
+
+ /* Constructors / destructors. */
+
+ IMPORT_C static CVeiTitleClipGenerator* NewL(const TSize& aMaxResolution,
+ TVeiTitleClipTransition aTransition,
+ TVeiTitleClipHorizontalAlignment aHorizontalAlignment,
+ TVeiTitleClipVerticalAlignment aVerticalAlignment);
+
+ IMPORT_C static CVeiTitleClipGenerator* NewLC(const TSize& aMaxResolution,
+ TVeiTitleClipTransition aTransition,
+ TVeiTitleClipHorizontalAlignment aHorizontalAlignment,
+ TVeiTitleClipVerticalAlignment aVerticalAlignment);
+
+ IMPORT_C virtual ~CVeiTitleClipGenerator();
+
+ /* Property methods. */
+
+ IMPORT_C virtual TPtrC DescriptiveName() const;
+
+ IMPORT_C virtual TUid Uid() const;
+
+ IMPORT_C virtual TTimeIntervalMicroSeconds Duration() const;
+
+
+ /* Video frame property methods. */
+
+ IMPORT_C virtual TInt VideoFrameCount() const;
+
+ IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameStartTime(TInt aIndex) const;
+
+ IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameEndTime(TInt aIndex) const;
+
+ IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameDuration(TInt aIndex) const;
+
+ IMPORT_C virtual TInt GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const;
+
+ IMPORT_C virtual TInt VideoFirstFrameComplexityFactor() const;
+
+ IMPORT_C virtual TInt VideoFrameDifferenceFactor(TInt aIndex) const;
+
+
+ /* Frame methods. */
+
+ IMPORT_C virtual void GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver,
+ TInt aIndex,
+ TSize* const aResolution,
+ TDisplayMode aDisplayMode,
+ TBool aEnhance,
+ TInt aPriority);
+
+ IMPORT_C virtual void CancelFrame();
+
+
+
+ /* New methods. */
+
+ /**
+ * Sets the text for the generator.
+ *
+ * @param aText text for the generator
+ */
+ IMPORT_C void SetTextL(const TDesC& aText);
+
+ /**
+ * Returns the text for this generator.
+ *
+ * @return text for the generator
+ */
+ IMPORT_C TPtrC Text() const;
+
+ /**
+ * Returns the transition of this title screen clip.
+ *
+ * @return transition
+ */
+ IMPORT_C TVeiTitleClipTransition Transition() const;
+
+ /**
+ * Returns the horizontal alignment.
+ *
+ * @return horizontal alignment
+ */
+ IMPORT_C TVeiTitleClipHorizontalAlignment HorizontalAlignment() const;
+
+ /**
+ * Returns the vertical alignment.
+ *
+ * @return vertical alignment
+ */
+ IMPORT_C TVeiTitleClipVerticalAlignment VerticalAlignment() const;
+
+ /**
+ * Sets the transiton and alignments. They are all tied together
+ * to allow them to be set at once to avoid generating several
+ * thumbnails when setting many options at the same time.
+ *
+ * @param aTransition transition for the generator.
+ * @param aHorizontalAlignment horizontal alignment
+ * @param aVerticalAlignment vertical alignment
+ */
+ IMPORT_C void SetTransitionAndAlignmentsL(TVeiTitleClipTransition aTransition,
+ TVeiTitleClipHorizontalAlignment aHorizontalAlignment,
+ TVeiTitleClipVerticalAlignment aVerticalAlignment);
+
+ /**
+ * Returns the background color.
+ *
+ * @return background color.
+ */
+ IMPORT_C TRgb BackgroundColor() const;
+
+ /**
+ * Sets the background color. This is used only if no background image
+ * is set.
+ *
+ * @param aBacgroundColor background color
+ */
+ IMPORT_C void SetBackgroundColorL(const TRgb& aBackgroundColor);
+
+ /**
+ * Returns the text color.
+ *
+ * @return text color.
+ */
+ IMPORT_C TRgb TextColor() const;
+
+ /**
+ * Sets the text color.
+ *
+ * @param aBacgroundColor text color
+ */
+ IMPORT_C void SetTextColorL(const TRgb& aTextColor);
+
+ /**
+ * Sets the background image. Transfers the ownership of the bitmap
+ * to the generator.
+ *
+ * @param aBackgroundImage background image
+ */
+ IMPORT_C void SetBackgroundImageL(const CFbsBitmap* aBackgroundImage);
+
+ /**
+ * Sets the background image from the specified file.
+ *
+ * @param aFilename filename for the image to load
+ * @param aObserver observer to notify when loading is complete
+ */
+ IMPORT_C void SetBackgroundImageL(const TDesC& aFilename, MVeiTitleClipGeneratorObserver& aObserver);
+
+ /**
+ * Returns the background image.
+ *
+ * @return background image
+ */
+ IMPORT_C CFbsBitmap* BackgroundImage() const;
+
+ /**
+ * Sets the duration.
+ *
+ * @param aDuration duration
+ */
+ IMPORT_C void SetDuration(const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ * Sets the descriptive name.
+ *
+ * @param aDescriptiveName descriptive name
+ */
+ IMPORT_C void SetDescriptiveNameL(const TDesC& aDescriptiveName);
+
+private:
+ // from MVedVideoClipGeneratorFrameObserver
+ void NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& aGenerator, TInt aError, CFbsBitmap* aBitmap);
+
+private: // constructors
+
+ /**
+ * First-phase constructor.
+ *
+ * @param aMaxResolution maximum resolution
+ * @param aTransition transition
+ * @param aHorizontalAlignment horizontal alignment
+ * @param aVerticalAlignment vertical alignment
+ */
+ CVeiTitleClipGenerator(const TSize& aMaxResolution,
+ TVeiTitleClipTransition aTransition,
+ TVeiTitleClipHorizontalAlignment aHorizontalAlignment,
+ TVeiTitleClipVerticalAlignment aVerticalAlignment);
+
+ /**
+ * Second-phase constructor.
+ */
+ void ConstructL();
+
+private: // new methods
+
+ /**
+ * Wrap the input text into lines.
+ */
+ void WrapTextToArrayL(const TDesC& aText);
+
+ /**
+ * Updates the first frame complexity factor value.
+ */
+ void UpdateFirstFrameComplexityFactorL();
+
+ /**
+ * Calculates the fading transition start and end indices.
+ *
+ * @param aInEndFrame for returning the end frame of in-transition
+ * @param aOutStartFrame for returning the start frame of out-transition
+ * @param aNumberOfFrames for returning number of frames
+ */
+ void CalculateTransitionFrameIndices(TInt& aInEndFrame, TInt& aOutStartFrame) const;
+
+ /**
+ * Gets the text font suitable for the current frame resolution.
+ */
+ void GetTextFont(TInt aFontDivisor = 0);
+
+ /**
+ * Draws wrapped texts on the specified bitmap.
+ *
+ * @param aBitmap bitmap to draw on
+ * @param aTextPoint text starting point
+ * @param aTextColor text color
+ * @param aBgColor background color
+ * @param aShadowColor shadow color
+ */
+ void DrawWrappedTextL(CFbsBitmap& aBitmap, const TPoint& aTextPoint, const TRgb& aTextColor,
+ const TRgb& aBgColor, const TRgb& aShadowColor, TBool aDrawBackground);
+
+ /**
+ * Finishes the GetFrameL() call.
+ */
+ CFbsBitmap* FinishGetFrameL(TInt aError = KErrNone);
+
+ /**
+ * Synchronous method for getting the first frame for complexity
+ * calculation.
+ *
+ * @return first frame
+ */
+ CFbsBitmap* GetFirstFrameL();
+
+ /**
+ * Draws the main title frame on a specified bitmap.
+ *
+ * @param aBitmap bitmap to draw on
+ * @param aIndex index of the frame to draw
+ */
+ void DrawMainTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex);
+
+ /**
+ * Draws the scroll title frame on a specified bitmap.
+ *
+ * @param aBitmap bitmap to draw on
+ * @param aIndex index of the frame to draw
+ */
+ void DrawScrollTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex);
+
+ /**
+ * Get the maximum frame rate, which is either the movie's
+ * frame rate, of the hard-coded maximum value.
+ *
+ * @return max frames per second
+ */
+ TInt MaximumFramerate() const;
+
+private:
+ // Member variables
+
+ /** First frame complexity factor. */
+ TInt iFirstFrameComplexityFactor;
+
+ /** Text. */
+ HBufC* iText;
+
+ /** Font for the text */
+ const CFont* iTextFont;
+
+ /** Resolution used to calculate font size. */
+ TSize iGetFontResolution;
+
+ /** Desciptive name. */
+ HBufC* iDescriptiveName;
+
+ /** Wrapped text pointer array. */
+ CArrayFix<TPtrC>* iWrappedArray;
+
+ /** Height of the wrapped text box. */
+ TInt iWrappedTextBoxHeight;
+
+ /** Resolution. */
+ TSize iMaxResolution;
+
+ /** Duration. */
+ TTimeIntervalMicroSeconds iDuration;
+
+ /** Transition. */
+ TVeiTitleClipTransition iTransition;
+
+ /** Horizontal alignment. */
+ TVeiTitleClipHorizontalAlignment iHorizontalAlignment;
+
+ /** Vertical alignment. */
+ TVeiTitleClipVerticalAlignment iVerticalAlignment;
+
+ /** Background image decode operation. */
+ CVeiTitleClipImageDecodeOperation* iDecodeOperation;
+
+ /** Background color. */
+ TRgb iBackgroundColor;
+
+ /** Text color. */
+ TRgb iTextColor;
+
+ /** Flag for notifying setting change. */
+ TBool iSettingsChanged;
+
+ /** Background image. */
+ CFbsBitmap* iBackgroundImage;
+
+ /** Scaled background image. */
+ CFbsBitmap* iScaledBackgroundImage;
+
+ /** Flag indicating that we should use the scaled bitmap. */
+ TBool iUseScaledImage;
+
+
+ /*
+ * Following member variables are temporary storage for the two-phase
+ * GetFrameL.
+ */
+
+ /** Observer. */
+ MVedVideoClipGeneratorFrameObserver* iGetFrameObserver;
+ /** Index. */
+ TInt iGetFrameIndex;
+ /** Resolution. */
+ TSize iGetFrameResolution;
+ /** DisplayMode. */
+ TDisplayMode iGetFrameDisplayMode;
+ /** Enhance flag. */
+ TBool iGetFrameEnhance;
+ /** Priority. */
+ TInt iGetFramePriority;
+
+ /* Operation classes need to be our friends. */
+ friend class CVeiTitleClipImageDecodeOperation;
+ };
+
+/**
+ * Image decode operation. Helper class for decoding the image and
+ * performing first-stage resizing.
+ */
+class CVeiTitleClipImageDecodeOperation : public CActive
+ {
+ public:
+ /**
+ * Factory constructor method. Constructs a decode operation.
+ *
+ * @param aGenerator generator that owns this operation
+ * @param aObserver observer that will be notified when the
+ * operation is complete
+ * @param aFilename filename of the image to be decoded
+ * @param aPriority priority of the active object
+ *
+ * @return constructed instance of decode operation
+ */
+ static CVeiTitleClipImageDecodeOperation* NewL(CVeiTitleClipGenerator& aGenerator,
+ MVeiTitleClipGeneratorObserver& aObserver,
+ const TDesC& aFilename,
+ TInt aPriority = CActive::EPriorityStandard);
+
+
+ /**
+ * Factory constructor method. Constructs a decode operation.
+ *
+ * @param aGenerator generator that owns this operation
+ * @param aSourceBitmap source bitmap
+ * @param aPriority priority of the active object
+ *
+ * @return constructed instance of decode operation
+ */
+ static CVeiTitleClipImageDecodeOperation* NewL(CVeiTitleClipGenerator& aGenerator,
+ CFbsBitmap* aSourceBitmap,
+ TInt aPriority = CActive::EPriorityStandard);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CVeiTitleClipImageDecodeOperation();
+
+ virtual void RunL();
+ virtual void DoCancel();
+ virtual TInt RunError(TInt aError);
+
+ /**
+ * Starts the loading operation.
+ *
+ * @param aMaxResolution maximum resolution that will be used
+ */
+ void StartLoadOperationL(const TSize& aMaxResolution);
+
+ /**
+ * Starts the scaling operation.
+ *
+ * @param aResolution resolution for the image
+ */
+ void StartScalingOperationL(const TSize& aResolution);
+
+ private: // methods
+ /**
+ * EPOC first-phase constructor.
+ *
+ * @param aGenerator generator that owns this decode operation
+ * @param aObserver observer to notify when the operation is
+ * complete
+ * @param aPriority priority for the active object
+ */
+ CVeiTitleClipImageDecodeOperation(CVeiTitleClipGenerator& aGenerator,
+ MVeiTitleClipGeneratorObserver& aObserver,
+ TInt aPriority = CActive::EPriorityStandard);
+
+ /**
+ * EPOC first-phase constructor.
+ *
+ * @param aGenerator generator that owns this decode operation
+ * @param aSourceBitmap source bitmap
+ * @param aPriority priority for the active object
+ */
+ CVeiTitleClipImageDecodeOperation(CVeiTitleClipGenerator& aGenerator,
+ CFbsBitmap* aSourceBitmap,
+ TInt aPriority = CActive::EPriorityStandard);
+ /**
+ * EPOC second-phase constructor.
+ *
+ * @param aFilename filename to decode.
+ */
+ void ConstructL(const TDesC& aFilename);
+
+ private: // members
+
+ /**
+ * Enumeration for the decode phase.
+ */
+ enum TDecodePhase
+ {
+ EPhaseNotStarted = 0,
+ EPhaseLoading,
+ EPhaseScaling,
+ EPhaseComplete
+ };
+
+ /** Decode phase. */
+ TDecodePhase iDecodePhase;
+
+ /** Generator that owns this decoder operation. */
+ CVeiTitleClipGenerator& iGenerator;
+
+ /** Observer.*/
+ MVeiTitleClipGeneratorObserver* iObserver;
+
+ /** Decoder. */
+ CImageDecoder* iDecoder;
+
+ /** Bitmap. */
+ CFbsBitmap* iBitmap;
+
+ /** Scaler. */
+ CBitmapScaler* iScaler;
+
+ /** Flag indicating whether to notify observer. */
+ TBool iNotifyObserver;
+ };
+
+
+
+
+#endif // __VEITITLECLIPGENERATOR_H__
+