Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 /**
     19  * @file pvmp4ffcn_node.h
     20  * @brief PVMF node for PVMp4FFComposer
     21  */
     22 
     23 #ifndef PVMP4FFCN_NODE_H_INCLUDED
     24 #define PVMP4FFCN_NODE_H_INCLUDED
     25 
     26 #ifndef OSCL_BASE_H_INCLUDED
     27 #include "oscl_base.h"
     28 #endif
     29 #ifndef OSCLCONFIG_IO_H_INCLUDED
     30 #include "osclconfig_io.h"
     31 #endif
     32 #ifndef OSCL_FILE_IO_H_INCLUDED
     33 #include "oscl_file_io.h"
     34 #endif
     35 #ifndef OSCL_SCHEDULER_AO_H_INCLUDED
     36 #include "oscl_scheduler_ao.h"
     37 #endif
     38 #ifndef PVLOGGER_H_INCLUDED
     39 #include "pvlogger.h"
     40 #endif
     41 #ifndef __A_IMpeg4File_H__
     42 #include "a_impeg4file.h"
     43 #endif
     44 #ifndef __MEDIA_CLOCK_CONVERTER_H
     45 #include "media_clock_converter.h"
     46 #endif
     47 #ifndef PVMF_FORMAT_TYPE_H_INCLUDED
     48 #include "pvmf_format_type.h"
     49 #endif
     50 #ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
     51 #include "pvmf_simple_media_buffer.h"
     52 #endif
     53 #ifndef PVMF_MEDIA_DATA_H_INCLUDED
     54 #include "pvmf_media_data.h"
     55 #endif
     56 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED
     57 #include "pvmf_node_interface.h"
     58 #endif
     59 #ifndef PVMF_NODE_UTILS_H_INCLUDED
     60 #include "pvmf_node_utils.h"
     61 #endif
     62 #ifndef PVMP4FFCN_TYPES_H_INCLUDED
     63 #include "pvmp4ffcn_types.h"
     64 #endif
     65 #ifndef PVMP4FFCN_TUNABLES_H_INCLUDED
     66 #include "pvmp4ffcn_tunables.h"
     67 #endif
     68 #ifndef PVMP4FFCN_CLIPCONFIG_H_INCLUDED
     69 #include "pvmp4ffcn_clipconfig.h"
     70 #endif
     71 #ifndef PVMP4FFCN_TRACKCONFIG_H_INCLUDED
     72 #include "pvmp4ffcn_trackconfig.h"
     73 #endif
     74 #ifndef PVMF_COMPOSER_SIZE_AND_DURATION_H_INCLUDED
     75 #include "pvmf_composer_size_and_duration.h"
     76 #endif
     77 
     78 #ifndef PVMI_CONFIG_AND_CAPABILITY_H_INCLUDED
     79 #include "pvmi_config_and_capability.h"
     80 #endif
     81 #ifndef PVMF_MEDIA_MSG_FORMAT_IDS_H_INCLUDED
     82 #include "pvmf_media_msg_format_ids.h"
     83 #endif
     84 
     85 #ifndef PVMI_KVP_H_INCLUDED
     86 #include "pvmi_kvp.h"
     87 #endif
     88 
     89 
     90 // Forward declaration
     91 class PVMp4FFComposerPort;
     92 
     93 
     94 //memory allocator type for this node.
     95 typedef OsclMemAllocator PVMp4FFCNAlloc;
     96 
     97 /** Node command type */
     98 typedef PVMFGenericNodeCommand<PVMp4FFCNAlloc> PVMp4FFCNCmd;
     99 
    100 /** Command queue type */
    101 typedef PVMFNodeCommandQueue<PVMp4FFCNCmd, PVMp4FFCNAlloc> PVMp4FFCNCmdQueue;
    102 
    103 /** Port vector type */
    104 typedef PVMFPortVector<PVMp4FFComposerPort, PVMp4FFCNAlloc> PVMp4FFCNPortVector;
    105 
    106 #define PROFILING_ON (PVLOGGER_INST_LEVEL >= PVLOGMSG_INST_PROF)
    107 
    108 #if PROFILING_ON
    109 #ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
    110 #include "pvmf_media_clock.h"
    111 #endif
    112 #endif
    113 
    114 #ifdef ANDROID
    115 #include <utils/RefBase.h>
    116 
    117 namespace android
    118 {
    119 class FragmentWriter;
    120 }
    121 #endif
    122 
    123 ////////////////////////////////////////////////////////////////////////////
    124 class PVMp4FFComposerNode : public PVMFNodeInterface,
    125         public OsclActiveObject,
    126         public PVMp4FFCNTrackConfigInterface,
    127         public PVMp4FFCNClipConfigInterface,
    128         public PvmfComposerSizeAndDurationInterface,
    129         public PvmiCapabilityAndConfig
    130 {
    131     public:
    132         PVMp4FFComposerNode(int32 aPriority);
    133         ~PVMp4FFComposerNode();
    134 
    135         // Pure virtual functions from PVMFNodeInterface
    136         OSCL_IMPORT_REF PVMFStatus ThreadLogon();
    137         OSCL_IMPORT_REF PVMFStatus ThreadLogoff();
    138         OSCL_IMPORT_REF PVMFStatus GetCapability(PVMFNodeCapability& aNodeCapability);
    139         OSCL_IMPORT_REF PVMFPortIter* GetPorts(const PVMFPortFilter* aFilter);
    140         OSCL_IMPORT_REF PVMFCommandId QueryUUID(PVMFSessionId aSession, const PvmfMimeString& aMimeType,
    141                                                 Oscl_Vector<PVUuid, PVMp4FFCNAlloc>& aUuids,
    142                                                 bool aExactUuidsOnly = false,
    143                                                 const OsclAny* aContext = NULL);
    144         OSCL_IMPORT_REF PVMFCommandId QueryInterface(PVMFSessionId aSession, const PVUuid& aUuid,
    145                 PVInterface*& aInterfacePtr,
    146                 const OsclAny* aContext = NULL);
    147         OSCL_IMPORT_REF PVMFCommandId RequestPort(PVMFSessionId aSession, int32 aPortTag,
    148                 const PvmfMimeString* aPortConfig = NULL,
    149                 const OsclAny* aContext = NULL);
    150         OSCL_IMPORT_REF PVMFCommandId ReleasePort(PVMFSessionId aSession, PVMFPortInterface& aPort,
    151                 const OsclAny* aContext = NULL);
    152         OSCL_IMPORT_REF PVMFCommandId Init(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    153         OSCL_IMPORT_REF PVMFCommandId Start(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    154         OSCL_IMPORT_REF PVMFCommandId Stop(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    155         OSCL_IMPORT_REF PVMFCommandId Pause(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    156         OSCL_IMPORT_REF PVMFCommandId Flush(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    157         OSCL_IMPORT_REF PVMFCommandId Reset(PVMFSessionId aSession, const OsclAny* aContext = NULL);
    158         OSCL_EXPORT_REF PVMFCommandId Prepare(PVMFSessionId aSession, const OsclAny* aContext);
    159         OSCL_IMPORT_REF PVMFCommandId CancelAllCommands(PVMFSessionId aSession, const OsclAny* aContextData = NULL);
    160         OSCL_IMPORT_REF PVMFCommandId CancelCommand(PVMFSessionId aSession, PVMFCommandId aCmdId,
    161                 const OsclAny* aContextData = NULL);
    162 
    163         // Pure virtual from PVInterface
    164         OSCL_IMPORT_REF void addRef();
    165         OSCL_IMPORT_REF void removeRef();
    166         OSCL_IMPORT_REF bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
    167 
    168         // Pure virtual functions from PVMp4FFCNClipConfigInterface
    169         OSCL_IMPORT_REF PVMFStatus SetOutputFileName(const OSCL_wString& aFileName);
    170         OSCL_IMPORT_REF PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle);
    171         OSCL_IMPORT_REF PVMFStatus SetAuthoringMode(PVMp4FFCN_AuthoringMode aAuthoringMode = PVMP4FFCN_3GPP_DOWNLOAD_MODE);
    172         OSCL_IMPORT_REF PVMFStatus SetPresentationTimescale(uint32 aTimescale);
    173         OSCL_IMPORT_REF PVMFStatus SetVersion(const OSCL_wString& aVersion, const OSCL_String& aLangCode);
    174         OSCL_IMPORT_REF PVMFStatus SetTitle(const OSCL_wString& aTitle, const OSCL_String& aLangCode);
    175         OSCL_IMPORT_REF PVMFStatus SetAuthor(const OSCL_wString& aAuthor, const OSCL_String& aLangCode);
    176         OSCL_IMPORT_REF PVMFStatus SetCopyright(const OSCL_wString& aCopyright, const OSCL_String& aLangCode);
    177         OSCL_IMPORT_REF PVMFStatus SetDescription(const OSCL_wString& aDescription, const OSCL_String& aLangCode);
    178         OSCL_IMPORT_REF PVMFStatus SetRating(const OSCL_wString& aRating, const OSCL_String& aLangCode);
    179         OSCL_IMPORT_REF PVMFStatus SetCreationDate(const OSCL_wString& aCreationDate);
    180         OSCL_IMPORT_REF PVMFStatus SetRealTimeAuthoring(const bool aRealTime);
    181         OSCL_IMPORT_REF PVMFStatus SetAlbumInfo(const OSCL_wString& aAlbum_Title, const OSCL_String& aLangCode);
    182         OSCL_IMPORT_REF PVMFStatus SetRecordingYear(uint16 aRecordingYear);
    183         OSCL_IMPORT_REF PVMFStatus SetPerformer(const OSCL_wString& aPerformer, const OSCL_String& aLangCode);
    184         OSCL_EXPORT_REF PVMFStatus SetGenre(const OSCL_wString& aGenre, const OSCL_String& aLangCode);
    185         OSCL_EXPORT_REF PVMFStatus SetClassification(const OSCL_wString& aClassificationInfo, uint32 aClassificationEntity, uint16 aClassificationTable, const OSCL_String& aLangCode);
    186         OSCL_EXPORT_REF PVMFStatus SetKeyWord(const OSCL_wString& aKeyWordInfo, const OSCL_String& aLangCode);
    187         OSCL_EXPORT_REF PVMFStatus SetLocationInfo(PvmfAssetInfo3GPPLocationStruct& aLocation_info);
    188         OSCL_IMPORT_REF uint16 ConvertLangCode(const OSCL_String& aLang);
    189 
    190         // Pure virtual functions from PVMp4FFCNTrackConfigInterface
    191         OSCL_IMPORT_REF PVMFStatus SetTrackReference(const PVMFPortInterface& aPort,
    192                 const PVMFPortInterface& aReferencePort);
    193         OSCL_IMPORT_REF PVMFStatus SetCodecSpecificInfo(const PVMFPortInterface& aPort, uint8* aInfo, int32 aSize);
    194 
    195         // Pure virtual from PvmfComposerSizeAndDurationInterface
    196         OSCL_IMPORT_REF PVMFStatus SetMaxFileSize(bool aEnable, uint32 aMaxFileSizeBytes);
    197         OSCL_IMPORT_REF void GetMaxFileSizeConfig(bool& aEnable, uint32& aMaxFileSizeBytes);
    198         OSCL_IMPORT_REF PVMFStatus SetMaxDuration(bool aEnable, uint32 aMaxDurationMilliseconds);
    199         OSCL_IMPORT_REF void GetMaxDurationConfig(bool& aEnable, uint32& aMaxDurationMilliseconds);
    200         OSCL_IMPORT_REF PVMFStatus SetFileSizeProgressReport(bool aEnable, uint32 aReportFrequency);
    201         OSCL_IMPORT_REF void GetFileSizeProgressReportConfig(bool& aEnable, uint32& aReportFrequency);
    202         OSCL_IMPORT_REF PVMFStatus SetDurationProgressReport(bool aEnable, uint32 aReportFrequency);
    203         OSCL_IMPORT_REF void GetDurationProgressReportConfig(bool& aEnable, uint32& aReportFrequency);
    204 
    205         //from PVMFPortActivityHandler
    206         void HandlePortActivity(const PVMFPortActivity& aActivity);
    207 
    208         // Friend class
    209         friend class PVMp4FFComposerPort;
    210         Oscl_Vector<OsclMemoryFragment*, OsclMemAllocator> memvector_sps;
    211         Oscl_Vector<OsclMemoryFragment*, OsclMemAllocator> memvector_pps;
    212         uint8 iNum_SPS_Set;
    213         uint8 iNum_PPS_Set;
    214 
    215         Oscl_Vector<PVA_FF_TextSampleDescInfo*, OsclMemAllocator> textdecodervector;
    216         int32 iText_sdIndex;
    217         // implemetation of PvmiCapabilityAndConfig class functions here
    218 
    219         void setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver);
    220 
    221         PVMFStatus getParametersSync(PvmiMIOSession aSession, PvmiKeyType aIdentifier,
    222                                      PvmiKvp*& aParameters, int& num_parameter_elements,
    223                                      PvmiCapabilityContext aContext);
    224         PVMFStatus releaseParameters(PvmiMIOSession aSession, PvmiKvp* aParameters, int num_elements);
    225         void createContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext);
    226         void setContextParameters(PvmiMIOSession aSession, PvmiCapabilityContext& aContext,
    227                                   PvmiKvp* aParameters, int num_parameter_elements);
    228         void DeleteContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext);
    229         void setParametersSync(PvmiMIOSession aSession, PvmiKvp* aParameters,
    230                                int num_elements, PvmiKvp * & aRet_kvp);
    231         PVMFCommandId setParametersAsync(PvmiMIOSession aSession, PvmiKvp* aParameters,
    232                                          int num_elements, PvmiKvp*& aRet_kvp, OsclAny* context = NULL);
    233         uint32 getCapabilityMetric(PvmiMIOSession aSession);
    234         PVMFStatus verifyParametersSync(PvmiMIOSession aSession, PvmiKvp* aParameters, int aNumElements);
    235 
    236         // function used in getParametersSync of capability class
    237         PVMFStatus GetConfigParameter(PvmiKvp*& aParameters, int& aNumParamElements, int32 aIndex, PvmiKvpAttr reqattr);
    238 
    239         // function used in VerifyParametersSync n SetParametersSync of capability class
    240         PVMFStatus VerifyAndSetConfigParameter(PvmiKvp& aParameter, bool aSetParam);
    241 
    242     private:
    243 #ifdef ANDROID
    244         friend class android::FragmentWriter;  // Access AddMemFragToTrack
    245 #endif
    246 
    247         // Pure virtual from OsclActiveObject
    248         void Run();
    249 
    250         /////////////////////////////////////////////////////
    251         //     Command processing routines
    252         /////////////////////////////////////////////////////
    253         PVMFCommandId QueueCommandL(PVMp4FFCNCmd& aCmd);
    254         bool ProcessCommand(PVMp4FFCNCmd& aCmd);
    255         void CommandComplete(PVMp4FFCNCmdQueue& aQueue, PVMp4FFCNCmd& aCmd, PVMFStatus aStatus, OsclAny* aData = NULL);
    256         void DoQueryUuid(PVMp4FFCNCmd& aCmd);
    257         void DoQueryInterface(PVMp4FFCNCmd& aCmd);
    258         void DoRequestPort(PVMp4FFCNCmd& aCmd);
    259         void DoReleasePort(PVMp4FFCNCmd& aCmd);
    260         void DoInit(PVMp4FFCNCmd& aCmd);
    261         void DoPrepare(PVMp4FFCNCmd& aCmd);
    262         void DoStart(PVMp4FFCNCmd& aCmd);
    263         PVMFStatus AddTrack(PVMp4FFComposerPort *aPort);
    264         void DoStop(PVMp4FFCNCmd& aCmd);
    265         void DoFlush(PVMp4FFCNCmd& aCmd);
    266         bool IsFlushPending();
    267         void FlushComplete();
    268         void DoPause(PVMp4FFCNCmd& aCmd);
    269         void DoReset(PVMp4FFCNCmd& aCmd);
    270         void DoCancelAllCommands(PVMp4FFCNCmd& aCmd);
    271         void DoCancelCommand(PVMp4FFCNCmd& aCmd);
    272 
    273         /////////////////////////////////////////////////////
    274         //      Port activity processing routines
    275         /////////////////////////////////////////////////////
    276         bool IsProcessIncomingMsgReady();
    277         /**
    278          * Process an incoming message of a the specified port
    279          * @param aPort Port where outgoing message is queued.
    280          * @return Completion status
    281          */
    282         PVMFStatus ProcessIncomingMsg(PVMFPortInterface* aPort);
    283 
    284         PVMFStatus AddMemFragToTrack(Oscl_Vector<OsclMemoryFragment, OsclMemAllocator> aFrame, OsclRefCounterMemFrag& aMemFrag, PVMFFormatType aFormat,
    285                                      uint32& aTimestamp, int32 aTrackId, PVMp4FFComposerPort *aPort);
    286         int32 GetIETFFrameSize(uint8 aFrameType, int32 aCodecType);
    287 
    288         /////////////////////////////////////////////////////
    289         //    Progress and max size / duration routines
    290         /////////////////////////////////////////////////////
    291         /**
    292          * Send file size or duration report if enabled.
    293          * @param aTimestamp Timestamp of current frame in milliseconds.
    294          * @return PVMFFailure if informational observer is not set, else PVMFSuccess
    295          */
    296         PVMFStatus SendProgressReport(uint32 aTimestamp);
    297 
    298         /**
    299          * Check if maximum file size or duration is reached if a maximum is set.
    300          *
    301          * @param aFrameSize Size of current frame in bytes.
    302          * @return PVMFSuccess if feature is enabled and the maximum file size / duration is reached.
    303          *         PVMFPending if feature is enabled and the max file size / duration has not been reached.
    304          *         PVMFErrNotSupported if feature is not enabled.
    305          *         PVMFFailure if informational observer is not set or if max file size or duration is set
    306          *         but the finalizing output file failed.
    307          */
    308         PVMFStatus CheckMaxFileSize(uint32 aFrameSize);
    309 
    310         /**
    311          * Check if maximum file size or duration is reached if a maximum is set.
    312          *
    313          * @param aTimestamp Timestamp of current frame in milliseconds.
    314          * @return PVMFSuccess if feature is enabled and the maximum file size / duration is reached.
    315          *         PVMFPending if feature is enabled and the max file size / duration has not been reached.
    316          *         PVMFErrNotSupported if feature is not enabled.
    317          *         PVMFFailure if informational observer is not set or if max file size or duration is set
    318          *         but the finalizing output file failed.
    319          */
    320         PVMFStatus CheckMaxDuration(uint32 aTimestamp);
    321 
    322         /**
    323          * Finalize the output file.
    324          * @return PVMFSuccess if output file is successfully finalized, else PVMFFailure
    325          */
    326         PVMFStatus RenderToFile();
    327 
    328         /**
    329          * Write DecoderSpecific Info at the end of encoding.
    330          * @return void
    331          */
    332         void WriteDecoderSpecificInfo();
    333 
    334         /** Clear all pending port activity after max file size or duration is reached. */
    335         void ClearPendingPortActivity();
    336 
    337         /////////////////////////////////////////////////////
    338         //      Event reporting routines
    339         /////////////////////////////////////////////////////
    340         void ReportErrorEvent(PvmfMp4FFCNError aEventType, OsclAny* aEventData = NULL);
    341         void ReportInfoEvent(PVMFEventType aEventType, OsclAny* aEventData = NULL);
    342         void SetState(TPVMFNodeInterfaceState);
    343 
    344     private:
    345         void GenerateDiagnostics(uint32 aTime, uint32 aSize);
    346         void LogDiagnostics();
    347         int32 StoreCurrentCommand(PVMp4FFCNCmdQueue&, PVMp4FFCNCmd&, PVMp4FFCNCmdQueue&);
    348 
    349         // Node command queue
    350         PVMp4FFCNCmdQueue iCmdQueue;
    351         PVMp4FFCNCmdQueue iCurrentCmd;
    352 
    353         // Vector of ports contained in this node
    354         PVMp4FFCNPortVector iInPorts;
    355 
    356         // File format
    357         PVA_FF_IMpeg4File* iMpeg4File;
    358         OSCL_wHeapString<OsclMemAllocator> iFileName;
    359         OSCL_wHeapString<OsclMemAllocator> iPostfix;
    360         OSCL_wHeapString<OsclMemAllocator> iOutputPath;
    361         Oscl_FileServer iFs;
    362         int32 iFileType;
    363         uint32 iAuthoringMode;
    364         uint32 iPresentationTimescale;
    365         uint32 iMovieFragmentDuration;
    366         Oscl_File* iFileObject;
    367 
    368 #ifdef ANDROID
    369         // Fragment to track writer thread.
    370         android::sp<android::FragmentWriter> iFragmentWriter;
    371 
    372         // Marker to report to the author node an event. It is really of
    373         // type PVMFComposerSizeAndDurationEvent but there is no value
    374         // in the enum for 'none' so we use a generic int.
    375         int iMaxReachedEvent;
    376         bool iMaxReachedReported;
    377 #endif
    378         // Meta data strings
    379         struct PVMP4FFCN_MetaDataString
    380         {
    381             PVMP4FFCN_MetaDataString(): iClassificationEntity(0), iClassificationTable(0), iLangCode(0) {};
    382             OSCL_wHeapString<OsclMemAllocator> iDataString;
    383             uint32 iClassificationEntity;
    384             uint16 iClassificationTable;
    385             uint16 iLangCode;
    386         };
    387         class PVMP4FFCN_KeyWord
    388         {
    389             public:
    390                 PVMP4FFCN_KeyWord(): iKeyWordSize(0), iLang_Code(0) {};
    391                 ~PVMP4FFCN_KeyWord() {};
    392                 uint32 iKeyWordSize;
    393                 uint16 iLang_Code;
    394                 OSCL_wHeapString<OsclMemAllocator> iData_String;
    395 
    396                 PVMP4FFCN_KeyWord(const OSCL_wString& aData_String, uint32 aKeyWordSize, uint16 aLang_Code)
    397                 {
    398                     iData_String = aData_String;
    399                     iKeyWordSize = aKeyWordSize;
    400                     iLang_Code = aLang_Code;
    401                 }
    402 
    403         };
    404         PVMP4FFCN_MetaDataString iVersion;
    405         PVMP4FFCN_MetaDataString iTitle;
    406         PVMP4FFCN_MetaDataString iAuthor;
    407         PVMP4FFCN_MetaDataString iCopyright;
    408         PVMP4FFCN_MetaDataString iDescription;
    409         PVMP4FFCN_MetaDataString iRating;
    410         PVMP4FFCN_MetaDataString iAlbumTitle;
    411         uint16 iRecordingYear;
    412         PVMP4FFCN_MetaDataString iPerformer;
    413         PVMP4FFCN_MetaDataString iGenre;
    414         PVMP4FFCN_MetaDataString iClassification;
    415         Oscl_Vector<PVMP4FFCN_KeyWord* , OsclMemAllocator> iKeyWordVector;
    416 
    417         PvmfAssetInfo3GPPLocationStruct iLocationInfo;
    418         OSCL_wHeapString<OsclMemAllocator> iCreationDate;
    419 
    420         // Convert from timescale
    421         MediaClockConverter iClockConverter;
    422 
    423         // Debug logging
    424         PVLogger* iLogger;
    425         PVLogger* iDataPathLogger;
    426 
    427         uint32 iExtensionRefCount;
    428 
    429         bool iRealTimeTS;
    430         bool iInitTSOffset;
    431         uint32 iTSOffset;
    432 
    433         //variables for fileoutputduration config
    434         bool iMaxFileSizeEnabled;
    435         bool iMaxDurationEnabled;
    436         uint32 iMaxFileSize;
    437         uint32 iMaxTimeDuration;
    438 
    439         bool iFileSizeReportEnabled;
    440         bool iDurationReportEnabled;
    441         uint32 iFileSizeReportFreq;
    442         uint32 iDurationReportFreq;
    443         uint32 iNextDurationReport;
    444         uint32 iNextFileSizeReport;
    445 
    446         uint32 iCacheSize;
    447         int32 iConfigSize;
    448         uint8 *pConfig;
    449         int32 iTrackId_H264;
    450         int32 iTrackId_Text;
    451         int32 iSyncSample;
    452         PVMFFormatType iformat_h264;
    453         PVMFFormatType iformat_text;
    454         bool iNodeEndOfDataReached;
    455         bool iSampleInTrack;
    456         bool iFileRendered;
    457 
    458 #if PROFILING_ON
    459         uint32 iMaxSampleAddTime;
    460         uint32 iMinSampleAddTime;
    461         uint32 iMinSampleSize;
    462         uint32 iMaxSampleSize;
    463         uint32 iNumSamplesAdded;
    464         PVLogger* iDiagnosticsLogger;
    465         bool oDiagnosticsLogged;
    466 
    467         // Statistics
    468         struct PVMp4FFCNStats
    469         {
    470             int32 iTrackId;
    471             uint32 iNumFrames;
    472             uint32 iDuration;
    473         };
    474 
    475         PVMp4FFCNStats iStats[3];
    476 #endif
    477 #ifdef _TEST_AE_ERROR_HANDLING
    478         bool iErrorHandlingAddMemFrag;
    479         bool iErrorHandlingAddTrack;
    480         bool iErrorCreateComposer;
    481         bool iErrorRenderToFile;
    482         PVMFFormatType iErrorAddTrack;
    483         uint32 iErrorNodeCmd;
    484         uint32 iTestFileSize;
    485         uint32 iTestTimeStamp;
    486         uint32 iErrorAddSample;
    487         uint32 iFileSize;
    488         uint32 iFileDuration;
    489         uint32 iErrorDataPathStall;
    490 #endif
    491 
    492         void GetTextSDIndex(uint32 aSampleNum, int32& aIndex);
    493 };
    494 
    495 #endif // PVMP4FFC_NODE_H_INCLUDED
    496