/* ------------------------------------------------------------------ * Copyright (C) 1998-2009 PacketVideo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the License for the specific language governing permissions * and limitations under the License. * ------------------------------------------------------------------- */ /** * @file pvmp4ffcn_clipconfig.h * @brief Clip level configuration of PVMp4FFComposerNode */ #ifndef PVMP4FFCN_CLIPCONFIG_H_INCLUDED #define PVMP4FFCN_CLIPCONFIG_H_INCLUDED #ifndef OSCL_BASE_H_INCLUDED #include "oscl_base.h" #endif #ifndef OSCL_STRING_H_INCLUDED #include "oscl_string.h" #endif #ifndef OSCL_FILE_IO_H_INCLUDED #include "oscl_file_io.h" #endif #ifndef PVMF_RETURN_CODES_H_INCLUDED #include "pvmf_return_codes.h" #endif #ifndef PV_UUID_H_INCLUDED #include "pv_uuid.h" #endif #ifndef PV_INTERFACE_H_INCLUDED #include "pv_interface.h" #endif #ifndef PV_MP4FFCOMPOSER_CONFIG_H_INCLUDED #include "pv_mp4ffcomposer_config.h" #endif #ifndef PVMI_KVP_H_INCLUDED #include "pvmi_kvp.h" #endif #define KPVMp4FFCNClipConfigUuid PVUuid(0x2e3b479f,0x2c46,0x465c,0xba,0x41,0xb8,0x91,0x11,0xa9,0xdf,0x3a) typedef enum { /** * This mode authors 3GPP Progressive Downloadable output files: * Meta Data is upfront. * Media Data is interleaved. Temp files are used. * Temporary files are written to the same directory as the output file. */ PVMP4FFCN_3GPP_PROGRESSIVE_DOWNLOAD_MODE = 0x00000003, /** * This mode authors 3GPP Downloadable output files: * Meta Data is towards the end of the clip. * Media Data is interleaved. * No temp files are used. */ PVMP4FFCN_3GPP_DOWNLOAD_MODE = 0x00000009, /** * This mode authors I-Motion compliant output files: * Meta Data is upfront. * Media Data is interleaved. Temp files are used. * Imotion DRM and Udta atoms are authored * Temporary files are written to the same directory as the output file. */ PVMP4FFCN_IMOTION_PSEUDO_STREAMING_MODE = 0x00000007, /** * This mode authors I-Motion compliant output files: * Meta Data is towards the end of the file. * Media Data is interleaved. * Imotion DRM and Udta atoms are authored * NoTemp files are used. */ PVMP4FFCN_IMOTION_DOWNLOAD_MODE = 0x0000000D, /** * This mode authors movie fragment files: * Meta Data is towards the end of the clip in MOOV and MOOF. * Media Data is interleaved. * No temp files are used. */ PVMP4FFCN_MOVIE_FRAGMENT_MODE = 0x00000021 } PVMp4FFCN_AuthoringMode; /** * PVMp4FFCNClipConfigInterface allows a client to control properties of PVMp4FFComposerNode */ class PVMp4FFCNClipConfigInterface : public PVInterface { public: /** * Register a reference to this interface. */ virtual void addRef() = 0; /** * Remove a reference to this interface. */ virtual void removeRef() = 0; /** * Query for an instance of a particular interface. * * @param uuid Uuid of the requested interface * @param iface Output parameter where pointer to an instance of the * requested interface will be stored if it is supported by this object * @return true if the requested interface is supported, else false */ virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0; /** * This method sets the output file name. This method must be called before * Start() is called. * * @param aFileName Output file name * @return Completion status of this method. */ virtual PVMFStatus SetOutputFileName(const OSCL_wString& aFileName) = 0; /** * This method sets the output file handle. This method must be called before * Start() is called. * * @param aFileHandle Output file descriptor * @return Completion status of this method. */ virtual PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle) = 0; /** * This method sets the authoring mode. This method must be called before * Start() is called. Default authoring mode is non 3GPPProgressive * Downloadable file using no temp files durating authoring. * * @param aAuthoringMode Authoring mode. * @return Completion status of this method. */ virtual PVMFStatus SetAuthoringMode(PVMp4FFCN_AuthoringMode aAuthoringMode = PVMP4FFCN_3GPP_DOWNLOAD_MODE) = 0; /** * Method to set the sample rate (i.e. timescale) for the overall Mpeg-4 presentation. * This is an optional configuration API that should be called before Start() is called. * * @param aTimescale Timescale of MPEG4 presentation * @return Completion status of this method. */ virtual PVMFStatus SetPresentationTimescale(uint32 aTimescale) = 0; /** * This method populates the version string. Version string contains * information about the version of the author SDK/app that is authoring * the clip. Currently only wide char strings are supported. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aVersion version string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetVersion(const OSCL_wString& aVersion, const OSCL_String& aLangCode) = 0; /** * This method populates the title string. Title string contains * the title of the authored clip.Currently only wide char strings are supported. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aTitle title string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetTitle(const OSCL_wString& aTitle, const OSCL_String& aLangCode) = 0; /** * This method populates the author string. Title string information about * the the author of the clip (actual user - like authored by grandma martha). * Currently only wide char strings are supported. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aAuthor author string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetAuthor(const OSCL_wString& aAuthor, const OSCL_String& aLangCode) = 0; /** * This method populates the copyright string. We do not support the * authoring of ISO defined copyright atom yet. This info is used to populate * the PV proprietary user data atom. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aCopyright Copyright string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetCopyright(const OSCL_wString& aCopyright, const OSCL_String& aLangCode) = 0; /** * This method populates the description string. Description string contains * some brief description of the clip (viz. surfing on the beach). Currently only * wide char strings are supported. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aDescription Description string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetDescription(const OSCL_wString& aDescription, const OSCL_String& aLangCode) = 0; /** * This method populates the rating string. Rating string contains * some information about the clip rating (viz.PG-13). Currently only * wide char strings are supported. */ /* This is an optional configuration API that should be called before Start() is called. * * @param aRating Rating string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetRating(const OSCL_wString& aRating, const OSCL_String& aLangCode) = 0; /** * This method ests the creation date in ISO 8601 format * * This is an optional configuration API that should be called before Start() is called. * * @param aCreationDate Creation date in ISO 8601 format. * @return Completion status of this method. */ virtual PVMFStatus SetCreationDate(const OSCL_wString& aCreationDate) = 0; /** * This method sets the real time authoring mode where incoming timestamps * are adjusted when authoring starts and checks are done to ensure that * incremental timstamps do not have 0 or negative deltas. By default, this * authoring mode is disabled. * * This is an optional configuration API that should be called before Start() is called. * * @param aRealTime Use real time authoring or not. * @return Completion status of this method. */ virtual PVMFStatus SetRealTimeAuthoring(const bool aRealTime) = 0; /* This is an optional configuration API that should be called before Start() is called. * * @param aAlbum_Title Album string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetAlbumInfo(const OSCL_wString& aAlbum_Title, const OSCL_String& aLangCode) = 0; /* This is an optional configuration API that should be called before Start() is called. * * @param aRecordingYear Recoding year. * @return Completion status of this method. */ virtual PVMFStatus SetRecordingYear(uint16 aRecordingYear) = 0; /** * This method populates the performer string. Performer string contains information about * the the performer of the clip. * Currently only wide char strings are supported. * Language code is currently used only in case of IMOTION authoring mode, * to populate the IMOTION author info atom. * * This is an optional configuration API that should be called before Start() is called. * * @param aPerformer performer string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetPerformer(const OSCL_wString& aPerformer, const OSCL_String& aLangCode) = 0; /** * This method populates the genre string. Genre string contains information about * the the genre of the clip. * Currently only wide char strings are supported. * Language code is currently used only in case of IMOTION authoring mode, * to populate the IMOTION author info atom. * * This is an optional configuration API that should be called before Start() is called. * * @param aGenre genre string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetGenre(const OSCL_wString& aGenre, const OSCL_String& aLangCode) = 0; /** * This method populates the Classification string. classification string contains information about * the the classification of the clip . * Currently only wide char strings are supported. * Language code is currently used only in case of IMOTION authoring mode, * to populate the IMOTION author info atom. * * This is an optional configuration API that should be called before Start() is called. * * @param aClassificationInfo classification information string. * @param aClassificationEntity classification Entity string. * @param aClassificationTable classification Table string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetClassification(const OSCL_wString& aClassificationInfo, uint32 aClassificationEntity, uint16 aClassificationTable, const OSCL_String& aLangCode) = 0; /** * This method populates the keyword string. keyword string contains information about * the the keyword of the clip. * Currently only wide char strings are supported. * Language code is currently used only in case of IMOTION authoring mode, * to populate the IMOTION author info atom. * * This is an optional configuration API that should be called before Start() is called. * * @param aKeyWordInfo Keyword information string. * @param aLangCode OSCL_HeapString ISO-639-2/T Language code * @return Completion status of this method. */ virtual PVMFStatus SetKeyWord(const OSCL_wString& aKeyWordInfo, const OSCL_String& aLangCode) = 0; /** * This method populates the LocationInfo string. LocationInfo string contains information about * the the Location of the clip. * * This is an optional configuration API that should be called before Start() is called. * * @param aLocation_info Instance of class PvmfAssetInfo3GPPLocationStruct * @return Completion status of this method. */ virtual PVMFStatus SetLocationInfo(PvmfAssetInfo3GPPLocationStruct& aLocation_info) = 0; /** * This method pouplates the aLang string. aLang contains the language code as a heap string and * this function is used to convert the lang code into uint16 format and stores the lang code into * the authored media file. * @param aLang Language code in Heap String format, * @return lang_code in a uint16 format. */ virtual uint16 ConvertLangCode(const OSCL_String& aLang) = 0; }; #endif // PVMP4FFCN_CLIPCONFIG_H_INCLUDED