diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/inc/VedVideoClip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/inc/VedVideoClip.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,410 @@ +/* +* 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 __VEDVIDEOCLIP_H__ +#define __VEDVIDEOCLIP_H__ + + +#include +#include + +#include "VedCommon.h" +#include "VedVideoClipInfo.h" + + +/* + * Forward declarations. + */ +class CVedMovieImp; +class CAudClip; + + +/** + * Individual video clip stored as a single bitstream. + * + * @see CVedMovie + */ +class CVedVideoClip : public CBase +{ +public: + + /* Constructors. */ + + static CVedVideoClip* NewL(CVedMovieImp* aMovie, const TDesC& aFileName, + TInt aIndex, CAudClip* aAudioClip, + MVedVideoClipInfoObserver& aObserver); + + static CVedVideoClip* NewL(CVedMovieImp* aMovie, + CVedVideoClipGenerator& aGenerator, TInt aIndex, + MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip); + + static CVedVideoClip* NewL(CVedMovieImp* aMovie, RFile* aFileHandle, + TInt aIndex, CAudClip* aAudioClip, + MVedVideoClipInfoObserver& aObserver); + + /* Destructor. */ + + /** + * Destroys the object and releases all resources. + */ + virtual ~CVedVideoClip(); + + + /* Property methods. */ + + /** + * Returns a video clip info object to get detailed information about + * the original video clip. Note that the specified editing operations + * (for example, cutting or muting audio) do not + * affect the values returned by the info object. + * + * @return pointer to a video clip info instance + */ + CVedVideoClipInfo* Info(); + + /** + * Returns whether this video clip with the specified editing operations + * applied (for example, changing speed or muting) has an audio track or not. + * + * @return ETrue if clip has an audio track; + * EFalse otherwise + */ + TBool EditedHasAudio() const; + + + /* Movie methods. */ + + /** + * Returns the movie that this video clip is part of. + * + * @return movie + */ + CVedMovieImp* Movie(); + + /** + * Returns the index of this video clip in the movie. + * + * @return index of the clip + */ + TInt Index() const; + + /** + * Sets the index of this video clip in the movie. + * Panics with code EVideoClipIllegalIndex + * if the clip index is invalid. + * + * @param aIndex new index of this clip + */ + void SetIndex(TInt aIndex); + + + /* Effect methods. */ + + /** + * Returns the playback speed of this video clip. Playback speed is + * specified as parts per thousand of the normal playback speed. For example. + * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. + * + * @return playback speed + */ + TInt Speed() const; + + /** + * Sets the playback speed of this video clip. Playback speed is + * specified as parts per thousand of the normal playback speed. For example. + * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. + * Panics with EVideoClipIllegalSpeed if playback speed is + * illegal. + * + * @param aSpeed playback speed; must be between 1 and 1000 + */ + void SetSpeed(TInt aSpeed); + + /** + * Returns the color effect of this video clip. + * + * @return color effect + */ + TVedColorEffect ColorEffect() const; + + /** + * Sets the color effect of this video clip. + * + * @param aColorEffect color effect + */ + void SetColorEffect(TVedColorEffect aColorEffect); + + + /** + * Returns the color tone. + * + * @return color tone + */ + TRgb ColorTone() const; + + /** + * Sets the color tone. + * + * @param aColorTone color tone + */ + void SetColorTone(TRgb aColorTone); + + /* Audio methods. */ + + /** + * Returns whether this video clip can be muted or not (that is, + * whether the mute setting has any effect). For example, if + * this video clip has no audio track, it can never have audio + * even if the mute setting is false. + * + * @return ETrue if this video clip can be muted; + * EFalse otherwise + */ + TBool IsMuteable() const; + + /** + * Returns whether the audio track of this video clip is mute or not. + * This covers all mute cases: user muted, automatically muted (slow motion), + * and missing audio track. + * + * @return ETrue if the audio track is muted; + * EFalse otherwise + */ + TBool Muting() const; + + /** + * Returns whether the audio track of this video clip is explicitly + * muted by user or not. Returns ETrue also if there is no audio track at all. + * + * @return ETrue if the audio track is muted; + * EFalse otherwise + */ + TBool IsMuted() const; + + /** + * Returns whether the audio track of this video clip is normalized or not. + * + * @return ETrue if the audio track is normalized; + * EFalse otherwise + */ + TBool Normalizing() const; + + + /** + * Sets whether the audio track of this video clip is muted or not. + * + * @param aVolume ETrue to mute the audio track; + * EFalse not to mute the audio track + */ + void SetMuted(TBool aMuted); + + /** + * Sets whether the audio track of this video clip is normalized or not. + * + * @param aNormalizing ETrue to normalize the audio track, + * EFalse not to normalize + */ + void SetNormalizing(TBool aNormalizing); + + /** + * Inserts a dynamic level mark to a clip. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * + * @param aMark mark to be added + * @return index of the mark inserted + */ + TInt InsertDynamicLevelMarkL(const TVedDynamicLevelMark& aMark); + + /** + * Removes a dynamic level mark in a clip. + * + * @param aIndex index of the removed mark in this clip + * @return ETrue if mark was removed, EFalse otherwise + */ + TBool RemoveDynamicLevelMark(TInt aIndex); + + /** + * Returns a dynamic level mark at the specified index + * If the index is illegal, the method panics with the code + * EIllegalDynamicLevelMarkIndex + * + * @return A dynamic level mark + */ + TVedDynamicLevelMark DynamicLevelMark(TInt aIndex) const; + + /** + * Returns the number of dynamic level marks + * + * @return The number of dynamic level mark + */ + TInt DynamicLevelMarkCount() const; + + /** + * Sets common volume gain for the clip. It is used to store + * the gain; the actual processing will be based on dynamic level + * marks which are set based on the gain value just before processing. + * Since global gain setting may affect the dynamic level mark, + * we need different variable to store the clip-specific gain also after the processing. + * I.e. dynamic level marks do not have effect to this value. + * + * @param aVolumeGain + */ + void SetVolumeGain(TInt aVolumeGain); + + /** + * Gets common volume gain for the clip. + * Since global gain setting may affect the dynamic level mark, + * we need different variable to store the clip-specific gain also after the processing. + * + * @param aVolumeGain + */ + TInt GetVolumeGain(); + + /* Timing methods. */ + + /** + * Returns the cut in time of this video clip in clip timebase. + * + * @return cut in time in microseconds in clip timebase + */ + TTimeIntervalMicroSeconds CutInTime() const; + + /** + * Sets the cut in time of this video clip in clip timebase. + * Panics with EVideoClipIllegalCutInTime if + * cut in time is illegal. + * + * @param aCutInTime cut in time in microseconds in clip timebase + */ + void SetCutInTime(TTimeIntervalMicroSeconds aCutInTime); + + /** + * Returns the cut out time of this video clip in clip timebase. + * + * @return cut out time in microseconds in clip timebase + */ + TTimeIntervalMicroSeconds CutOutTime() const; + + /** + * Sets the cut out time of this video clip in clip timebase. + * Panics with EVideoClipIllegalCutOutTime if + * cut out time is illegal. + * + * @param aCutOutTime cut out time in microseconds in clip timebase + */ + void SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime); + + /** + * Returns the start time of this video clip in movie timebase. + * + * @return start time in microseconds in movie timebase + */ + TTimeIntervalMicroSeconds StartTime() const; + + /** + * Returns the end time of this video clip in movie timebase. + * + * @return end time in microseconds in movie timebase + */ + TTimeIntervalMicroSeconds EndTime() const; + + /** + * Returns the duration of this video clip with the specified + * editing operations applied (for example, cutting + * and changing speed) + * + * @return duration in microseconds + */ + TTimeIntervalMicroSeconds EditedDuration() const; + + /** + * Update the audio clip timings. + */ + void UpdateAudioClip(); + +protected: + + +private: + /* + * Default contructor + */ + CVedVideoClip(CVedMovieImp* aMovie, CAudClip* aAudioClip); + + /* + * Symbian OS two phased constructor. + */ + void ConstructL(const TDesC& aFileName, TInt aIndex, + MVedVideoClipInfoObserver& aObserver); + + void ConstructL(CVedVideoClipGenerator& aGenerator, TInt aIndex, + MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip); + + void ConstructL(RFile* aFileHandle, TInt aIndex, + MVedVideoClipInfoObserver& aObserver); + + +private: + // Member variables + + // Movie class this clip is part of. + CVedMovieImp* iMovie; + // Index of this clip in movie. + TInt iIndex; + // File of the video clip. + RFile iLockFile; + // Info class of this video clip. + CVedVideoClipInfo* iInfo; + + // Speed effect of this video clip. + TInt iSpeed; + // Color effect of this video clip. + TVedColorEffect iColorEffect; + // Transition effect of this video clip. + TVedMiddleTransitionEffect iMiddleTransitionEffect; + + // Cut in time of this video clip. + TTimeIntervalMicroSeconds iCutInTime; + // Cut out time of this video clip. + TTimeIntervalMicroSeconds iCutOutTime; + // Start time of this video clip. + TTimeIntervalMicroSeconds iStartTime; + + // Audio track of this video clip + CAudClip* iAudClip; + // Audio track muting: slow motion mutes it automatically, but switching back to normal speed + // should unmute it unless user has muted it on purpose. + TBool iUserMuted; + // color tone + TRgb iColorTone; + + TBool iLockFileOpened; + + friend class CVedMovieImp; + friend class CVedMovieAddClipOperation; +}; + + +#endif // __VEDVIDEOCLIP_H__ +