sl@0: /* sl@0: * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #ifndef __NGAPOSTPROCHWDEVICE_H__ sl@0: #define __NGAPOSTPROCHWDEVICE_H__ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include //RSurfaceManager sl@0: #include //TSurfaceId sl@0: #include //TVideoAspectRatio sl@0: //TBC++ sl@0: //#include sl@0: #include "devvideosurfacehandlecustominterface.h" sl@0: #include "postinitializeci.h" sl@0: //TBC-- sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include "fetchframecustominterface.h" sl@0: #include "MdfRDebug.h" sl@0: #include "NGAPostProcHwDevice_UID.hrh" sl@0: #include "NGAPostProcSessionManagerObserver.h" sl@0: #include "common.h" sl@0: sl@0: class CNGAPostProcSessionManager; sl@0: class CNGAPostProcSurfaceHandler; sl@0: class CNGAPostProcTimer; sl@0: class RWsSession; sl@0: sl@0: class CNGAPostProcHwDevice: public CMMFVideoPostProcHwDevice, sl@0: public MMmfVideoBufferManagement, sl@0: public MNGAPostProcSessionManagerObserver, sl@0: public MMMFVideoSurfaceSupport, sl@0: public MMmfVideoPropertiesObserver, sl@0: public MMmfVideoResourceObserver, sl@0: public MMmfVideoSurfaceHandleControl, sl@0: public MMmfVideoPropertiesNotifier, sl@0: public MMmfVideoPlayRateControl, sl@0: public MMmfVideoSecureOutput, sl@0: public MMmfAdvancedVideoSecureOutput, sl@0: public MMmfPostInitializeRequest sl@0: { sl@0: sl@0: public: sl@0: // === Constructors and destructor === sl@0: /** sl@0: * Two-phased constructor. sl@0: * @return pointer to an instance of CMMFVideoPostProcHwDevice sl@0: */ sl@0: static CMMFVideoPostProcHwDevice* NewL(); sl@0: sl@0: /** sl@0: * Destructor. sl@0: */ sl@0: ~CNGAPostProcHwDevice(); sl@0: sl@0: public: sl@0: sl@0: // === CMMFVideoPostProcHwDevice === sl@0: sl@0: /** sl@0: Sets the device input format to an uncompressed video format. sl@0: sl@0: @param "aFormat" "The input format to use." sl@0: @leave "The method will leave if an error occurs. Typical error codes used: sl@0: * KErrNotSupported - The input format is not supported." sl@0: @pre "This method can only be called before the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetInputFormatL(const TUncompressedVideoFormat& aFormat); sl@0: sl@0: /** sl@0: Sets the decoder device that will write data to this post-processor. Decoded pictures will be sl@0: written with WritePictureL() or through a custom interface. After pictures have been processed, sl@0: they must be returned to the decoder using ReturnPicture(). sl@0: sl@0: @param "aDevice" "The decoder source plug-in to use." sl@0: @pre "This method can only be called before the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetInputDevice(CMMFVideoDecodeHwDevice* aDevice); sl@0: sl@0: /** sl@0: Writes an uncompressed video picture to the post-processor. The picture must be returned to the sl@0: client or source plug-in after it has been used. sl@0: sl@0: @param "aPicture" "The picture to write." sl@0: @leave "This method may leave with one of the system-wide error codes." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void WritePictureL(TVideoPicture* aPicture); sl@0: sl@0: /** sl@0: Retrieves post-processing information about this hardware device. sl@0: The device creates a CPostProcessorInfo structure, fills it with correct data, pushes it sl@0: to the cleanup stack and returns it. The client will delete the object when it is no sl@0: longer needed. sl@0: sl@0: @return "Post-processor information as a CPostProcessorInfo object. sl@0: The object is pushed to the cleanup stack, and must be deallocated by the caller." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: */ sl@0: CPostProcessorInfo* PostProcessorInfoLC(); sl@0: sl@0: /** sl@0: Retrieves the list of the output formats that the device supports. The list is ordered in sl@0: plug-in preference order, with the preferred formats at the beginning of the list. The list sl@0: can depend on the device source format, and therefore SetSourceFormatL() must be called before sl@0: calling this method. sl@0: sl@0: @param "aFormats" "An array for the result format list. The array must be created and destroyed by the caller." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method may only be called before the hwdevice has been initialized using Initialize()." sl@0: */ sl@0: void GetOutputFormatListL(RArray& aFormats); sl@0: sl@0: /** sl@0: Sets the device output format. sl@0: sl@0: @param "aFormat" "The format to use." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method may only be called before the hwdevice has been initialized using Initialize()." sl@0: */ sl@0: void SetOutputFormatL(const TUncompressedVideoFormat &aFormat); sl@0: sl@0: /** sl@0: Sets the clock source to use for video timing. If no clock source is set. video playback sl@0: will not be synchronized, but will proceed as fast as possible, depending on input data sl@0: and output buffer availability. sl@0: sl@0: @param "aClock" "The clock source to be used." sl@0: @pre "This method can only be called before the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetClockSource(MMMFClockSource* aClock); sl@0: sl@0: /** sl@0: Sets the device video output destination. The destination can be the screen (using direct sl@0: screen access) or memory buffers. By default memory buffers are used. If data is written sl@0: to another device, this method is ignored, and suitable memory buffers are always used. sl@0: sl@0: @param "aScreen" "True if video output destination is the screen, false if memory buffers." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can only be called before the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetVideoDestScreenL(TBool aScreen); sl@0: sl@0: /** sl@0: Sets the post-processing types to be used. sl@0: sl@0: @param "aPostProcCombination" "The post-processing steps to perform, a bitwise OR of values from TPostProcessType." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetPostProcessTypesL(TUint32 aPostProcCombination); sl@0: sl@0: /** sl@0: Sets post-processing options for input (pan-scan) cropping. sl@0: sl@0: @param "aRect" "The cropping rectangle to use." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetInputCropOptionsL(const TRect& aRect); sl@0: sl@0: /** sl@0: Sets post-processing options for YUV to RGB color space conversion. sl@0: Specifies the input YUV and output RGB formats to use explicitly. SetSourceFormatL(), sl@0: SetOutputFormatL(), and SetPostProcessTypesL() must be called before this method is used. sl@0: sl@0: @param "aOptions" "The conversion options to use." sl@0: @param "aYuvFormat" "Conversion source YUV format" sl@0: @param "aRgbFormat" "Conversion target RGB format" sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions, const TYuvFormat& aYuvFormat, sl@0: TRgbFormat aRgbFormat); sl@0: sl@0: /** sl@0: Sets post-processing options for YUV to RGB color space conversion. sl@0: Uses the device input and output formats. For decoder devices the default YUV format used is sl@0: the format specified in the input bitstream. SetSourceFormatL(), SetOutputFormatL(), and sl@0: SetPostProcessTypesL() must be called before this method is used. sl@0: sl@0: @param "aOptions" "The conversion options to use." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetYuvToRgbOptionsL(const TYuvToRgbOptions& aOptions); sl@0: sl@0: /** sl@0: Sets post-processing options for rotation. SetPostProcessTypesL() must be called before sl@0: this method is used. sl@0: sl@0: @param "aRotationType" "The rotation to perform." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetRotateOptionsL(TRotationType aRotationType); sl@0: sl@0: /** sl@0: Sets post-processing options for scaling. SetPostProcessTypesL() must be called before sl@0: this method is used. sl@0: sl@0: @param "aTargetSize" "Scaling target size. If a fixed scale factor size is used, sl@0: the new dimensions must be set to width=floor(factor*width), sl@0: height=floor(factor*height). For example, scaling a sl@0: QCIF (176x144) picture up by a factor of 4/3 yields a size sl@0: of 234x192." sl@0: @param "aAntiAliasFiltering" "True if anti-aliasing filtering should be used. sl@0: If the post-processor does not support anti-aliased scaling, sl@0: or supports anti-aliased scaling only, this argument is ignored." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetScaleOptionsL(const TSize& aTargetSize, TBool aAntiAliasFiltering); sl@0: sl@0: /** sl@0: Sets post-processing options for output cropping. SetPostProcessTypesL() must be called before sl@0: this method is used. sl@0: sl@0: @param "aRect" "Output cropping area." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetOutputCropOptionsL(const TRect& aRect); sl@0: sl@0: /** sl@0: Sets post-processing plug-in specific options. SetPostProcessTypesL() must be called before sl@0: this method is used. sl@0: sl@0: @param "aOptions" "The options. The format is plug-in specific." sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can be called either before or after the hwdevice has been initialized with Initialize(). sl@0: If called after initialization, the change must only be committed when CommitL() is called." sl@0: */ sl@0: void SetPostProcSpecificOptionsL(const TDesC8& aOptions); sl@0: sl@0: /** sl@0: Initializes the device. This method is asynchronous, the device will call sl@0: MMFVideoPlayProxy::MdvppInitializeComplete() after initialization has completed. After this sl@0: method has successfully completed, further configuration changes are not possible except where sl@0: separately noted. sl@0: */ sl@0: void Initialize(); sl@0: sl@0: /** sl@0: Commit all changes since the last CommitL(), Revert() or Initialize() sl@0: to the hardware device. This only applies to methods which can be called both sl@0: before AND after DevVideoPlay has been initialized. sl@0: sl@0: @see SetPostProcessTypesL sl@0: @see SetInputCropOptionsL sl@0: @see SetYuvToRgbOptionsL sl@0: @see SetRotateOptionsL sl@0: @see SetScaleOptionsL sl@0: @see SetOutputCropOptionsL sl@0: @see SetPostProcSpecificOptionsL sl@0: sl@0: @leave "The method will leave if an error occurs." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void CommitL(); sl@0: sl@0: /** sl@0: Revert all changes since the last CommitL(), Revert() or Initialize() sl@0: back to their previous settings. This only applies to methods which can sl@0: be called both before AND after DevVideoPlay has been initialized. sl@0: sl@0: @see SetPostProcessTypesL sl@0: @see SetInputCropOptionsL sl@0: @see SetYuvToRgbOptionsL sl@0: @see SetRotateOptionsL sl@0: @see SetScaleOptionsL sl@0: @see SetOutputCropOptionsL sl@0: @see SetPostProcSpecificOptionsL sl@0: sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Revert(); sl@0: sl@0: /** sl@0: Starts writing output directly to the display frame buffer using Direct Screen Access. sl@0: sl@0: @param "aVideoRect" "The video output rectangle on screen." sl@0: @param "aScreenDevice" "The screen device to use. The screen device object must be valid in the current thread." sl@0: @param "aClipRegion" "Initial clipping region to use." sl@0: sl@0: @leave "This method may leave with one of the system-wide error codes. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void StartDirectScreenAccessL(const TRect& aVideoRect, sl@0: CFbsScreenDevice& aScreenDevice, const TRegion& aClipRegion); sl@0: sl@0: /** sl@0: Sets a new clipping region for Direct Screen Access. After the method returns, no video will sl@0: be drawn outside of the region. If clipping is not supported, or the clipping region is too sl@0: complex, either playback will pause or will resume without video display, depending on the sl@0: current setting of SetPauseOnClipFail(), and the result can be verified with IsPlaying(). sl@0: Clipping can be disabled by setting a new clipping region that includes the whole video window. sl@0: sl@0: @param "aRegion" "The new clipping region. After the method returns, no video will be drawn outside the region." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetScreenClipRegion(const TRegion& aRegion); sl@0: sl@0: /** sl@0: Sets whether the system should pause playback when it gets a clipping region it cannot handle, sl@0: or Direct Screen Access is aborted completely. If not, processing will proceed normally, but no sl@0: video will be drawn. By default, playback is paused. sl@0: sl@0: @param "aPause" "True if playback should be paused when clipping fails, false if not. sl@0: If playback is not paused, it will be continued without video display." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetPauseOnClipFail(TBool aPause); sl@0: sl@0: /** sl@0: Aborts Direct Screen Access completely, to be called from MAbortDirectScreenAccess::AbortNow() sl@0: and similar methods. DSA can be resumed by calling StartDirectScreenAccessL(). sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void AbortDirectScreenAccess(); sl@0: sl@0: /** sl@0: Indicates whether playback is proceeding. This method can be used to check whether playback was sl@0: paused or not in response to a new clipping region or DSA abort. sl@0: sl@0: @return "ETrue if video is still being played (even if not necessarily displayed)." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: TBool IsPlaying(); sl@0: sl@0: /** sl@0: Re-draws the latest video picture. Only available when DSA is being used. If DSA is aborted or a sl@0: non-supported clipping region has been set, the request may be ignored. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Redraw(); sl@0: sl@0: sl@0: /** sl@0: Starts video playback, including decoding, post-processing, and rendering. Playback will proceed sl@0: until it has been stopped or paused, or the end of the bitstream is reached. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Start(); sl@0: sl@0: /** sl@0: Stops video playback. No new pictures will be decoded, post-processed, or rendered. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Stop(); sl@0: sl@0: /** sl@0: Pauses video playback, including decoding, post-processing, and rendering. No pictures will be sl@0: decoded, post-processed, or rendered until playback has been resumed. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Pause(); sl@0: sl@0: /** sl@0: Resumes video playback after a pause. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void Resume(); sl@0: sl@0: /** sl@0: Changes to a new decoding and playback position, used for randomly accessing (seeking) the sl@0: input stream. The position change flushes all input and output buffers. Pre-decoder and sl@0: post-decoder buffering are handled as if a new bitstream was being decoded. If the device still sl@0: has buffered pictures that precede the new playback position, they will be discarded. If playback sl@0: is synchronized to a clock source, the client is responsible for setting the clock source to the sl@0: new position. sl@0: sl@0: @param "aPlaybackPosition" "The new playback position in the video stream." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetPosition(const TTimeIntervalMicroSeconds& aPlaybackPosition); sl@0: sl@0: /** sl@0: Freezes a picture on the screen. After the picture has been frozen, no new pictures are sl@0: displayed until the freeze is released with ReleaseFreeze(). If the device output is being sl@0: written to memory buffers or to another plug-in, instead of the screen, no decoded pictures sl@0: will be delivered while the freeze is active, and they are simply discarded. sl@0: sl@0: @param "aTimestamp" "The presentation timestamp of the picture to freeze. The frozen picture sl@0: will be the first picture with a timestamp greater than or equal to this sl@0: parameter." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void FreezePicture(const TTimeIntervalMicroSeconds& aTimestamp); sl@0: sl@0: /** sl@0: Releases a picture frozen with FreezePicture(). sl@0: sl@0: @param "aTimestamp" "The presentation timestamp of the picture to release. The first picture sl@0: displayed after the release will be the first picture with a timestamp sl@0: greater than or equal to this parameter. To release the freeze immediately, sl@0: set the timestamp to zero." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void ReleaseFreeze(const TTimeIntervalMicroSeconds& aTimestamp); sl@0: sl@0: sl@0: /** sl@0: Returns the current playback position, i.e. the timestamp for the most recently displayed or sl@0: virtually displayed picture. If the device output is written to another device, the most recent sl@0: output picture is used. sl@0: sl@0: @return "Current playback position." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: TTimeIntervalMicroSeconds PlaybackPosition(); sl@0: sl@0: /** sl@0: Returns the total amount of memory allocated for uncompressed pictures. This figure only sl@0: includes the pictures actually allocated by the plug-in itself, so that the total number of sl@0: bytes allocated in the system can be calculated by taking the sum of the values from all plug-ins. sl@0: sl@0: @return "Total number of bytes of memory allocated for uncompressed pictures." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: TUint PictureBufferBytes(); sl@0: sl@0: /** sl@0: Reads various counters related to decoded pictures. The counters are reset when Initialize() sl@0: or this method is called, and thus they only include pictures processed since the last call. sl@0: sl@0: Post-processor devices return the number of input pictures in iPicturesDecoded and sl@0: iTotalPictures. If the decoded pictures are written to another plug-in, they are considered sl@0: to be "virtually displayed". sl@0: sl@0: @param "aCounters" "The counter structure to fill." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void GetPictureCounters(CMMFDevVideoPlay::TPictureCounters& aCounters); sl@0: sl@0: sl@0: /** sl@0: Sets the computational complexity level to use. If separate complexity levels are not available, sl@0: the method call is ignored. If the level specified is not available, the results are undefined. sl@0: Typically the device will either ignore the request or use the nearest suitable level. sl@0: sl@0: The complexity level can be changed at any point during playback. sl@0: sl@0: @param "aLevel" "The computational complexity level to use. Level zero (0) is the most complex sl@0: one, with the highest quality. Higher level numbers require less processing sl@0: and may have lower quality." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void SetComplexityLevel(TUint aLevel); sl@0: sl@0: /** sl@0: Gets the number of complexity levels available. sl@0: sl@0: @return "The number of complexity control levels available, or zero if the information is not sl@0: available yet. The information may not be available if the number of levels depends on sl@0: the input data, and enough input data has not been read yet. In that case, using level sl@0: zero is safe." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: TUint NumComplexityLevels(); sl@0: sl@0: /** sl@0: Gets information about a computational complexity level. This method can be called after sl@0: NumComplexityLevels() has returned a non-zero value - at that point the information is guaranteed sl@0: to be available. Some hardware device implementations may not be able to provide all values, sl@0: in that case the values will be approximated. sl@0: sl@0: @param "aLevel" "The computational complexity level to query. The level numbers range from zero sl@0: (the most complex) to NumComplexityLevels()-1." sl@0: @param "aInfo" "The information structure to fill." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void GetComplexityLevelInfo(TUint aLevel, CMMFDevVideoPlay::TComplexityLevelInfo& aInfo); sl@0: sl@0: /** sl@0: Returns a picture back to the device. This method is called by CMMFDevVideoPlay to return pictures sl@0: from the client (after they have been written with NewPicture()), or by the output device when sl@0: it has finished using a picture. sl@0: sl@0: @param "aPicture" "The picture to return. The device can re-use the memory for the picture." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void ReturnPicture(TVideoPicture* aPicture); sl@0: sl@0: /** sl@0: Gets a copy of the latest picture sent to output. sl@0: sl@0: @param "aPictureData" "Target picture. The memory for the picture must be allocated by the sl@0: caller, and initialized properly. The data formats must match the snapshot sl@0: format requested." sl@0: @param "aFormat" "The picture format to use for the snapshot." sl@0: sl@0: @return "ETrue if the snapshot was taken, EFalse if a picture is not available. The picture may not sl@0: be available if decoding has not progressed far enough yet." sl@0: sl@0: @leave "The method will leave if an error occurs. Typical error codes used: sl@0: * KErrNotSupported - The requested data format or picture size is not supported, or the sl@0: plug-in does not support snapshots." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: // TBool GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& aFormat) {return EFalse;}; sl@0: TBool GetSnapshotL(TPictureData& aPictureData, const TUncompressedVideoFormat& aFormat); sl@0: sl@0: /** sl@0: When the snapshot is available, it will be returned to the client using the TimedSnapshotComplete() sl@0: callback. To cancel a timed snapshot request, use CancelTimedSnapshot(). Only one timed snapshot sl@0: request can be active at a time. sl@0: sl@0: @param "aPictureData" "Target picture. The memory for the picture must be allocated by sl@0: the caller, and initialized properly. The data formats must match sl@0: the snapshot format requested. The picture must remain valid until sl@0: the snapshot has been taken or until the request has been cancelled sl@0: with CancelTimedSnapshot()." sl@0: @param "aFormat" "The picture format to use for the snapshot." sl@0: @param "aPresentationTimestamp" "Presentation timestamp for the picture to copy." sl@0: sl@0: @leave "The method will leave if an error occurs. Typical error codes used: sl@0: * KErrNotSupported - The requested data format or picture size is not supported or sl@0: the plug-in does not support timed snapshots." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: //void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, sl@0: // const TTimeIntervalMicroSeconds& aPresentationTimestamp){}; sl@0: void GetTimedSnapshotL(TPictureData*, const TUncompressedVideoFormat&, const TTimeIntervalMicroSeconds&){}; sl@0: sl@0: sl@0: /** sl@0: When the snapshot is available, it will be returned to the client using the TimedSnapshotComplete() sl@0: callback. To cancel a timed snapshot request, use CancelTimedSnapshot(). Only one timed snapshot sl@0: request can be active at a time. sl@0: sl@0: @param "aPictureData" "Target picture. The memory for the picture must be allocated by sl@0: the caller, and initialized properly. The data formats must match sl@0: the snapshot format requested. The picture must remain valid until sl@0: the snapshot has been taken or until the request has been cancelled sl@0: with CancelTimedSnapshot()." sl@0: @param "aFormat" "The picture format to use for the snapshot." sl@0: @param "aPictureId" "Picture identifier for the picture to copy." sl@0: sl@0: @leave "The method will leave if an error occurs. Typical error codes used: sl@0: * KErrNotSupported - The requested data format or picture size is not supported or sl@0: the plug-in does not support timed snapshots." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: // void GetTimedSnapshotL(TPictureData* aPictureData, const TUncompressedVideoFormat& aFormat, sl@0: // const TPictureId& aPictureId){}; sl@0: void GetTimedSnapshotL(TPictureData*, const TUncompressedVideoFormat&, const TPictureId& ){}; sl@0: sl@0: /** sl@0: Cancels a timed snapshot request. sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void CancelTimedSnapshot(){}; sl@0: sl@0: /** sl@0: Gets a list of the supported snapshot picture formats. sl@0: sl@0: @param "aFormats" "An array for the result format list. The array must be created and destroyed by sl@0: the caller." sl@0: sl@0: @leave "This method may leave with one of the standard error codes." sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void GetSupportedSnapshotFormatsL(RArray&){}; sl@0: sl@0: sl@0: /** sl@0: sl@0: Notifies the hardware device that the end of input data has been reached and no more input data sl@0: will be written. The hardware device can use this signal to ensure that the remaining data gets sl@0: processed, without waiting for new data. For example when the data type is not EDuCodedPicture, sl@0: calling this method is necessary otherwise a hardware device implementation might be looking for sl@0: the start code for the next picture to ensure it has a complete picture before starting to decode sl@0: the previous one. sl@0: sl@0: sl@0: After the remaining data has been processed (and displayed, if applicable), the hardware sl@0: device must notify the proxy with the MdvppStreamEnd() callback. sl@0: sl@0: DevVideo clients are encouraged to call this method, but its use is not mandatory for synchronized sl@0: processing. For synchronized playback, all video pictures are processed or discarded according to sl@0: their timestamps, and so the client can easily infer when processing is complete. However, it sl@0: should be noted that the last picture might not be displayed if this method is not called and the sl@0: input data type is not EDuCodedPicture. sl@0: sl@0: For non-synchronized playback (e.g. file conversion), a client must call this method otherwise it sl@0: will never find out when the hardware device has finished processing the data. sl@0: sl@0: @pre "This method can only be called after the hwdevice has been initialized with Initialize()." sl@0: */ sl@0: void InputEnd(); sl@0: sl@0: /** sl@0: Retrieves a custom interface to the device. sl@0: @param "aInterface" "Interface UID, defined with the custom interface." sl@0: @return "Pointer to the interface implementation, or NULL if the device does not sl@0: implement the interface requested. The return value must be cast to the sl@0: correct type by the user." sl@0: */ sl@0: TAny* CustomInterface(TUid aInterface); sl@0: sl@0: // === MNGAPostProcSessionManagerObserver === sl@0: /** sl@0: Set the proxy implementation to be used. Called just after the object is constructed. sl@0: @param "aProxy" "The proxy to use." sl@0: */ sl@0: void BufferAvailable(TInt aBufId, TInt aStatus); sl@0: sl@0: public: sl@0: sl@0: // === MMmfVideoBufferManagement === sl@0: sl@0: /** sl@0: * Sets the observer object to use. The observer gets notified sl@0: * when new buffers are available and when buffers need to be sl@0: * released back to the media device. sl@0: * sl@0: * This method can only be called before the media device has sl@0: * been Initialized with InitializeL(). sl@0: * sl@0: * @param aObserver The observer object to use. sl@0: */ sl@0: void MmvbmSetObserver(MMmfVideoBufferManagementObserver* aObserver); sl@0: sl@0: /** sl@0: * Enables input buffer management mode. In buffer management mode sl@0: * the target media device allocates memory for input buffers and sl@0: * the client can only use input buffers allocated with sl@0: * MmvbmGetBufferL(). sl@0: * sl@0: * This method can only be called before the media device has been sl@0: * Initialized with InitializeL(). This method must be called if sl@0: * the client uses MmvbmGetBufferL(). sl@0: * sl@0: * @param aEnable ETrue if input buffer management mode is used. sl@0: */ sl@0: void MmvbmEnable(TBool aEnable); sl@0: sl@0: /** sl@0: * Sets the buffer options to use. The client can request the sl@0: * number of input buffers that should be available, but typically sl@0: * only few (one or two) buffers can be used. sl@0: * sl@0: * This method can only be called before the media device has been sl@0: * Initialized with InitializeL(). sl@0: * sl@0: * @param aOptions The buffer options to use, see TBufferOptions. sl@0: * sl@0: * @leave KErrNotSupported The requested buffer options are not sl@0: * supported. Typically the client has requested too many input sl@0: * buffers. sl@0: */ sl@0: void MmvbmSetBufferOptionsL(const TBufferOptions& aOptions); sl@0: sl@0: /** sl@0: * Gets the buffer options currently in use. sl@0: * sl@0: * This method can only be called before the media device has been sl@0: * Initialized with InitializeL(). sl@0: * sl@0: * @param aOptions Target buffer options data structure. sl@0: */ sl@0: void MmvbmGetBufferOptions(TBufferOptions& aOptions); sl@0: sl@0: /** sl@0: * Gets a new input picture buffer. The client can then write data sl@0: * into the buffer and write it back to the media device with sl@0: * WritePictureL(). sl@0: * sl@0: * This method can only be called after the media device has been sl@0: * Initialized with InitializeL(). This method can only be called sl@0: * in buffer management mode, i.e. if the client has called sl@0: * MmvbmEnable(ETrue). sl@0: * sl@0: * Note that target-allocated and client-allocated input buffers sl@0: * cannot be mixed. In buffer management mode only input buffers sl@0: * allocated with this method can be sent to the media device. sl@0: * sl@0: * If a client has retrieved buffers with MmvbmGetBufferL(), it sl@0: * must be prepated to release them synchronously at any point if sl@0: * MmmfBufferManagementObserver::MmvbmoReleaseBuffers() is sl@0: * called. This may happen if the target media device suddenly sl@0: * loses access to the buffers due to DSA abort, resource sl@0: * management conflict, or media device destruction. sl@0: * sl@0: * @param aSize The requested buffer size, in pixels. The buffer sl@0: * size should match the picture size set at initialisation phase, sl@0: * or otherwise suitable buffer may not be available. If the size sl@0: * is smaller than the size set at initialisation phase, the sl@0: * allocated buffer may be larger than requested. sl@0: * sl@0: * @return A new input picture buffer. If no free buffers are sl@0: * available, the return value is NULL. sl@0: * sl@0: * @leave General The method will leave if an error occurs. Lack sl@0: * of free buffers is not considered an error. sl@0: */ sl@0: TVideoPicture* MmvbmGetBufferL(const TSize& aSize); sl@0: sl@0: /** sl@0: * Releases an input buffer back to the media device without using sl@0: * it. This method is mainly used as a response to a sl@0: * MmvbmReleaseBuffers() callback. sl@0: * sl@0: * @param aBuffer The buffer to release. sl@0: */ sl@0: void MmvbmReleaseBuffer(TVideoPicture* aBuffer); sl@0: sl@0: public: sl@0: sl@0: // === MMMFVideoSurfaceSupport === sl@0: sl@0: /** sl@0: Requests the media device to use graphics surfaces for video rendering. sl@0: The client must call this method before Initialize() to ensure the media sl@0: device allocates the right types of resources for rendering. sl@0: */ sl@0: void MmvssUseSurfaces(); sl@0: sl@0: /** sl@0: Sets a new video surface support observer to receive surface management events sl@0: from the media device. sl@0: sl@0: @param aObserver New observer object to use. sl@0: */ sl@0: void MmvssSetObserver(MMMFVideoSurfaceObserver& aObserver); sl@0: sl@0: /** sl@0: Retrieves surface parameters for a display. The client typically calls this in response sl@0: to a MmvsoSurfaceCreated() or MmvsoSurfaceParametersUpdated() observer callback. sl@0: sl@0: @param aSurfaceId sl@0: Surface ID for the display. sl@0: @param aCropRect sl@0: Cropping rectangle within the surface. The crop rectangle identifies the area of sl@0: the surface that should be shown on the screen. sl@0: @param aPixelAspectRatio sl@0: Video picture pixel aspect ratio. sl@0: sl@0: @leave KErrNotReady if no surface is available for the display. sl@0: */ sl@0: sl@0: void MmvssGetSurfaceParametersL(TSurfaceId& aSurfaceId, TRect& aCropRect, sl@0: TVideoAspectRatio& aPixelAspectRatio); sl@0: /** sl@0: Indicates that the surface is no longer in use and can be destroyed. The client typically calls sl@0: this in response to MmvsoSurfaceCreated() (while old surface is already in use and the current sl@0: should be removed) or MmvsoRemoveSurface() observer callback. sl@0: sl@0: @param aSurfaceId Surface ID that is no longer in use sl@0: sl@0: @leave KErrNotFound if the surface does not exist sl@0: */ sl@0: void MmvssSurfaceRemovedL(const TSurfaceId& aSurfaceId); sl@0: sl@0: public: sl@0: sl@0: // === MMmfVideoPropertiesObserver === sl@0: sl@0: /** sl@0: Decoded video properties updated. The media device implementing the sl@0: MMmfVideoPropertiesNotifier extension will call this method immediately sl@0: before outputting a picture with the updated properties. sl@0: sl@0: When the extension is used between a decoder and a post-processor media sl@0: device, the post-processor can associate the changed properties with the sl@0: correct picture, since the next incoming picture after this call will sl@0: be the first updated one. sl@0: sl@0: When the extension is used between a DevVideoPlay client and a sl@0: post-processor media device, the client can synchronously reconfigure sl@0: video display options using SetScaleOptionsL() and related methods. This sl@0: lets the client reconfigure the display for the correct picture. sl@0: sl@0: @param aYuvFormat Updated YUV format parameters. The updated fields are sl@0: iAspectRatioDenom, iAspectRatioNum, and iCoefficients sl@0: @param aPictureSize Updated picture size. This size will be the true sl@0: picture display size, excluding any padding that sl@0: the codec might use. sl@0: */ sl@0: virtual void MmvpoUpdateVideoProperties(const TYuvFormat& aYuvFormat, const TSize& aPictureSize); sl@0: sl@0: public: sl@0: sl@0: // === MMmfVideoResourceObserver === sl@0: sl@0: /** sl@0: Indicates that a media device has lost its resources. The client must sl@0: synchronously pause or stop processing before returning from this method sl@0: so that the media device can release its resources to the system. If sl@0: the client does not pause or stop, resource loss will be handled as a sl@0: fatal error. sl@0: sl@0: The client may start again or resume after receiving a sl@0: MvroResourcesRestored() callback. sl@0: sl@0: @param aMediaDevice UID for the media device that lost resources. The sl@0: client can use this e.g. to determine whether the sl@0: decoder or the post-processor lost resources. This sl@0: is typically not required though since the client sl@0: must pause DevVideo entirely. sl@0: */ sl@0: virtual void MmvroResourcesLost(TUid aMediaDevice); sl@0: sl@0: /** sl@0: Indicates that a media device has regained its resources after a sl@0: previous resource loss. The client can restart or resume processing. sl@0: This can be done either synchronously or asynchronously. sl@0: sl@0: @param aMediaDevice UID for the media device that regained resources. sl@0: */ sl@0: virtual void MmvroResourcesRestored(TUid aMediaDevice); sl@0: sl@0: sl@0: // === MMmfVideoSurfaceHandleControl === sl@0: sl@0: /** sl@0: Sets an external surface ID. This should be called as soon as external surface is created. sl@0: sl@0: @param aSurfaceID external surface ID. sl@0: sl@0: */ sl@0: sl@0: virtual void MmvshcSetSurfaceHandle(const TSurfaceId& aSurfaceHandle); sl@0: sl@0: /** sl@0: Sets a redraw buffer to be used during resource loss. sl@0: sl@0: @param aRedrawBuffer redraw buffer. sl@0: sl@0: */ sl@0: virtual void MmvshcRedrawBufferToSurface(TPtrC8& aRedrawBuffer); sl@0: sl@0: /** sl@0: * Creates a surface and maps the surface with the chunk handle passed in. sl@0: * @param aAttributes sl@0: * @param aHandle is the Chunk handle for the data. sl@0: * @param aSurfaceId returns the surfaceId that was just created sl@0: * sl@0: * @return error code sl@0: */ sl@0: sl@0: virtual TInt MmvshcCreateSurface(const RSurfaceManager::TSurfaceCreationAttributes& aAttributes, TInt aHandle, TSurfaceId& aSurfaceId); sl@0: sl@0: public: sl@0: // === MMmfVideoPropertiesNotifier === sl@0: /** sl@0: Sets a new video properties observer. This method can be called at any sl@0: time after the media device has been instantiated. sl@0: sl@0: @param aObserver New observer object. sl@0: */ sl@0: virtual void MmvpnSetObserver(MMmfVideoPropertiesObserver* aObserver); sl@0: sl@0: public: sl@0: sl@0: void ReturnPicToDecoder(TVideoPicture* aPic); sl@0: TInt AttemptToPost(); sl@0: sl@0: public: sl@0: //=== MMdfTrickPlayControl === = sl@0: /** sl@0: * Query the Direction capabilities from the MDF decoders and sl@0: * post processor. sl@0: * sl@0: */ sl@0: virtual void MmvprcGetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities); sl@0: sl@0: /** sl@0: * Sets the playback speed. A negative rate means play backward. sl@0: * +/- percentage. sl@0: * sl@0: */ sl@0: virtual void MmvprcSetPlayRateL(const TInt aRate); sl@0: sl@0: /** sl@0: * Gets the playback speed. A negative rate means play backward. sl@0: * +/- percentage. sl@0: * sl@0: */ sl@0: virtual TInt MmvprcPlayRateL(); sl@0: sl@0: /** sl@0: * Sets the step frame number in frame step mode sl@0: * +/- frames sl@0: */ sl@0: virtual void MmvprcStepFrameL(const TInt aStep); sl@0: sl@0: /** sl@0: * Registers the observer sl@0: */ sl@0: virtual void MmvprcSetObserver(MMmfVideoPlayRateObserver& aObserver); sl@0: sl@0: public: sl@0: sl@0: // === MMmfVideoSecureOutput === sl@0: /** sl@0: * Notifies the media device if the content can only be sent to a sl@0: * secure output. The device display is typically considered a sl@0: * secure output, but a high-quality unprotected analog or digital sl@0: * video output connector is not. By default all content can be sl@0: * sent to both secure and insecure outputs. sl@0: * sl@0: * This method can only be called before the media device has been sl@0: * initialised with InitializeL(). sl@0: * sl@0: * @param aSecure Set to ETrue if the content can only be sent to sl@0: * a secure output, EFalse if both secure and unsecure outputs can sl@0: * be used. sl@0: * sl@0: * @leave KErrNotSupported Insecure outputs cannot be sl@0: * disabled. The client should not play protected content. sl@0: */ sl@0: virtual void MmvsoSetSecureOutputL(TBool aSecure); sl@0: sl@0: public: sl@0: //=== AdvancedVideoSecureOutput === = sl@0: virtual void MmavsoSetAllowedOutputL(TUint aAllowedOutputMask); sl@0: sl@0: public: sl@0: // === MMmfPostInitializeRequest === sl@0: virtual void MmpirPostInitializeRequest(MMmfPostInitializeResponse& aResponse); sl@0: sl@0: protected: sl@0: sl@0: // === CMMFVideoPostProcHwDevice === sl@0: /** sl@0: Set the proxy implementation to be used. Called just after the object is constructed. sl@0: @param "aProxy" "The proxy to use." sl@0: */ sl@0: void SetProxy(MMMFDevVideoPlayProxy& aProxy); sl@0: sl@0: protected: sl@0: sl@0: /** sl@0: * Symbian 2nd phase constructor . sl@0: */ sl@0: void ConstructL(); sl@0: sl@0: private: sl@0: TInt IsTimeToPost(TVideoPicture* frame, TInt64& delta); sl@0: TVideoPicture* CreateBuffersL(TInt aBufId); sl@0: void CreateVBMBuffersL(); sl@0: TInt SetupExternalSurface(const TSurfaceId &aSurfaceID); sl@0: void ReleaseInputQ(); sl@0: void ReleaseProcessQ(); sl@0: void ReleasePicture(TVideoPicture *pic); sl@0: void PublishSurfaceCreated(); sl@0: void PublishSurfaceUpdated(); sl@0: TInt SetupSurface(); sl@0: void SetSurfaceAttributes(const TSize& aSize, TInt aNumBuf); sl@0: TInt GetID(TVideoPicture *aPicture); sl@0: TInt GetExternalBufferID(TVideoPicture *aPicture); sl@0: TInt RegisterSurface(const TSurfaceId& aSurfaceId); sl@0: TInt IsGceReady(); sl@0: void SetTimer(TInt64 aDelta); sl@0: TInt ConvertPostProcBuffer(TVideoPicture* pSrc, TVideoPicture* pDest); sl@0: void AddPictureToVBMQ(TVideoPicture *pic); sl@0: void AddPictureToColorConversionQ(TVideoPicture *pic); sl@0: void ResetCountingBuffer(); sl@0: void PicturesSkipped(); sl@0: TVideoPicture* DoColorConvert(TVideoPicture* aPicture); sl@0: sl@0: /** sl@0: Adds a picture to the Input queue. Based on the timestamp of the picture, sl@0: it is either appeneded at the end of the queue or inserted at the sl@0: appropriate position. The queue is arranged in the ascending order. sl@0: The ret value indicates if the head of the queue was changed or not. sl@0: */ sl@0: TInt AddToQ(TVideoPicture* aPicture); sl@0: sl@0: /** sl@0: Removes a picture from Input queue based on the playrate. sl@0: If the playrate is +ve ie forward playback head will be removed sl@0: and if the playrate is -ve ie backward playback tail sl@0: will be removed. sl@0: */ sl@0: void RemoveFromQ(); sl@0: sl@0: /** sl@0: Returns a picture from Input queue based on the playrate. sl@0: If the playrate is +ve ie forward playback head will be returned sl@0: and if the playrate is -ve ie backward playback tail sl@0: will be returned. sl@0: */ sl@0: TVideoPicture* PeekQ(); sl@0: sl@0: /** sl@0: Adds a surface hint to a video surface. If there is any hint already added, sl@0: the surface is updated with the new hint. sl@0: */ sl@0: TInt AddHints(); sl@0: sl@0: #ifdef _DUMP_YUV_FRAMES sl@0: void captureYuv(TVideoPicture* aPicture); sl@0: #endif sl@0: sl@0: TInt SetSourceFormat(); sl@0: TInt SetSourceRange(); sl@0: TInt ColorConvert(tBaseVideoFrame* aInputFrame, TUint8* aDestPtr, tWndParam* aInputCropWindow, tWndParam* aOutputCropWindow); sl@0: sl@0: private: sl@0: sl@0: // sl@0: // C++ default constructor. sl@0: // sl@0: CNGAPostProcHwDevice(); sl@0: sl@0: // sl@0: // State of post processor sl@0: // sl@0: enum TPPState sl@0: { sl@0: EInitializing, sl@0: EInitialized, sl@0: EPlaying, sl@0: EPaused, sl@0: EStopped sl@0: }; sl@0: sl@0: enum TTimeToPost sl@0: { sl@0: ESkipIt = -1, sl@0: EPostIt = 0, sl@0: EDelayIt = 1, sl@0: }; sl@0: sl@0: private: sl@0: sl@0: MMMFDevVideoPlayProxy* iProxy; sl@0: CMMFVideoDecodeHwDevice* iInputDecoderDevice; sl@0: RArray iInputQ; sl@0: RArray iProcessQ; sl@0: MMMFClockSource* iClockSource; sl@0: TTimeIntervalMicroSeconds iCurrentPlaybackPosition; sl@0: TPPState iPPState; sl@0: CNGAPostProcSurfaceHandler* iSurfaceHandler; sl@0: CNGAPostProcSessionManager* iSessionManager; sl@0: sl@0: RSurfaceManager::TSurfaceCreationAttributesBuf iAttributes; sl@0: RChunk iChunk; sl@0: RSurfaceManager::TInfoBuf iInfo; sl@0: TSurfaceId iSurfaceId; sl@0: TBool iIsInputEnded; sl@0: CNGAPostProcTimer* iPostingTimer; sl@0: CMMFDevVideoPlay::TPictureCounters iPictureCounters; sl@0: TBool iFirstPictureUpdated; sl@0: TBool iUsingExternalSurface; sl@0: TBool iIsColorConversionNeeded; sl@0: RArray iColorConversionQ; sl@0: TBool iSurfaceCreatedEventPublished; sl@0: TInt iOverflowPictureCounter; sl@0: TInt iVideoFrameBufSize; sl@0: TBool iResourceLost; sl@0: TBool iRedrawDone; sl@0: // Flag to indicate that the redraw surface has been created, and sl@0: // can be used in a subsequent call ro Redraw() sl@0: TBool iRedrawSurfaceInUse; sl@0: sl@0: //-- members for buffer management -- sl@0: MMmfVideoBufferManagementObserver* iVBMObserver; sl@0: TBufferOptions iVBMBufferOptions; sl@0: RArray iVBMBufferReferenceQ; sl@0: RArray iVBMBufferQ; sl@0: TBool iVBMEnabled; sl@0: RArray iSupportedInputFormats; sl@0: TInt count; sl@0: sl@0: //-- members for Surface Hints -- sl@0: RSurfaceManager::THintPair iHint; sl@0: TUint iSurfaceMask; sl@0: TUid iSurfaceKey; sl@0: sl@0: //-- members for Surface support -- sl@0: MMMFVideoSurfaceObserver* iVideoSurfaceObserver; sl@0: MMmfVideoPropertiesObserver* iVPObserver; sl@0: RWsSession iWsSession; sl@0: TSize iPicSize; sl@0: TUint iAspectRatioNum; sl@0: TUint iAspectRatioDenom; sl@0: //-- members for Trickplay support -- sl@0: TInt iStepFrameCount; sl@0: TInt iPlayRate; sl@0: TBool iKeyFrameMode; sl@0: MMmfVideoPlayRateObserver* iFPObserver; sl@0: TUint8 iSkippedFramesCountingBuffer[64]; sl@0: TUint8 iSkippedFramesInLast64Frames; sl@0: TUint8 iCurrentPosInFramesCountingBuffer; sl@0: TUncompressedVideoFormat iVideoFormat; sl@0: //---------- utility variables ------- sl@0: // Image source format sl@0: TUint8 iSourceFormat; sl@0: sl@0: //Image range sl@0: TUint8 iSourceRange; sl@0: sl@0: //-- members for PostInitializeRequest support -- sl@0: MMmfPostInitializeResponse* iPostInitializeResponse; sl@0: TBool iIsExternalChunk; sl@0: }; sl@0: sl@0: /** sl@0: * Timer of Posting sl@0: */ sl@0: sl@0: class CNGAPostProcTimer: public CTimer sl@0: { sl@0: public: sl@0: static CNGAPostProcTimer* NewL( CNGAPostProcHwDevice& aParent ); sl@0: ~CNGAPostProcTimer(); sl@0: sl@0: protected: sl@0: void RunL(); sl@0: sl@0: private: sl@0: CNGAPostProcTimer( CNGAPostProcHwDevice& aParent ); sl@0: void ConstructL(); sl@0: sl@0: private: sl@0: CNGAPostProcHwDevice& iParent; sl@0: }; sl@0: sl@0: #endif //__NGAPOSTPROCHWDEVICE_H__ sl@0: