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_clipconfig.h 20 * @brief Clip level configuration of PVMp4FFComposerNode 21 */ 22 23 #ifndef PVMP4FFCN_CLIPCONFIG_H_INCLUDED 24 #define PVMP4FFCN_CLIPCONFIG_H_INCLUDED 25 26 #ifndef OSCL_BASE_H_INCLUDED 27 #include "oscl_base.h" 28 #endif 29 #ifndef OSCL_STRING_H_INCLUDED 30 #include "oscl_string.h" 31 #endif 32 #ifndef OSCL_FILE_IO_H_INCLUDED 33 #include "oscl_file_io.h" 34 #endif 35 #ifndef PVMF_RETURN_CODES_H_INCLUDED 36 #include "pvmf_return_codes.h" 37 #endif 38 #ifndef PV_UUID_H_INCLUDED 39 #include "pv_uuid.h" 40 #endif 41 #ifndef PV_INTERFACE_H_INCLUDED 42 #include "pv_interface.h" 43 #endif 44 #ifndef PV_MP4FFCOMPOSER_CONFIG_H_INCLUDED 45 #include "pv_mp4ffcomposer_config.h" 46 #endif 47 48 49 #ifndef PVMI_KVP_H_INCLUDED 50 #include "pvmi_kvp.h" 51 #endif 52 #define KPVMp4FFCNClipConfigUuid PVUuid(0x2e3b479f,0x2c46,0x465c,0xba,0x41,0xb8,0x91,0x11,0xa9,0xdf,0x3a) 53 54 typedef enum 55 { 56 57 /** 58 * This mode authors 3GPP Progressive Downloadable output files: 59 * Meta Data is upfront. 60 * Media Data is interleaved. Temp files are used. 61 * Temporary files are written to the same directory as the output file. 62 */ 63 PVMP4FFCN_3GPP_PROGRESSIVE_DOWNLOAD_MODE = 0x00000003, 64 65 /** 66 * This mode authors 3GPP Downloadable output files: 67 * Meta Data is towards the end of the clip. 68 * Media Data is interleaved. 69 * No temp files are used. 70 */ 71 PVMP4FFCN_3GPP_DOWNLOAD_MODE = 0x00000009, 72 73 74 /** 75 * This mode authors I-Motion compliant output files: 76 * Meta Data is upfront. 77 * Media Data is interleaved. Temp files are used. 78 * Imotion DRM and Udta atoms are authored 79 * Temporary files are written to the same directory as the output file. 80 */ 81 PVMP4FFCN_IMOTION_PSEUDO_STREAMING_MODE = 0x00000007, 82 83 /** 84 * This mode authors I-Motion compliant output files: 85 * Meta Data is towards the end of the file. 86 * Media Data is interleaved. 87 * Imotion DRM and Udta atoms are authored 88 * NoTemp files are used. 89 */ 90 PVMP4FFCN_IMOTION_DOWNLOAD_MODE = 0x0000000D, 91 92 /** 93 * This mode authors movie fragment files: 94 * Meta Data is towards the end of the clip in MOOV and MOOF. 95 * Media Data is interleaved. 96 * No temp files are used. 97 */ 98 PVMP4FFCN_MOVIE_FRAGMENT_MODE = 0x00000021 99 100 101 } PVMp4FFCN_AuthoringMode; 102 103 /** 104 * PVMp4FFCNClipConfigInterface allows a client to control properties of PVMp4FFComposerNode 105 */ 106 class PVMp4FFCNClipConfigInterface : public PVInterface 107 { 108 public: 109 /** 110 * Register a reference to this interface. 111 */ 112 virtual void addRef() = 0; 113 114 /** 115 * Remove a reference to this interface. 116 */ 117 virtual void removeRef() = 0; 118 119 /** 120 * Query for an instance of a particular interface. 121 * 122 * @param uuid Uuid of the requested interface 123 * @param iface Output parameter where pointer to an instance of the 124 * requested interface will be stored if it is supported by this object 125 * @return true if the requested interface is supported, else false 126 */ 127 virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0; 128 129 /** 130 * This method sets the output file name. This method must be called before 131 * Start() is called. 132 * 133 * @param aFileName Output file name 134 * @return Completion status of this method. 135 */ 136 virtual PVMFStatus SetOutputFileName(const OSCL_wString& aFileName) = 0; 137 138 /** 139 * This method sets the output file handle. This method must be called before 140 * Start() is called. 141 * 142 * @param aFileHandle Output file descriptor 143 * @return Completion status of this method. 144 */ 145 virtual PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle) = 0; 146 147 /** 148 * This method sets the authoring mode. This method must be called before 149 * Start() is called. Default authoring mode is non 3GPPProgressive 150 * Downloadable file using no temp files durating authoring. 151 * 152 * @param aAuthoringMode Authoring mode. 153 * @return Completion status of this method. 154 */ 155 virtual PVMFStatus SetAuthoringMode(PVMp4FFCN_AuthoringMode aAuthoringMode = PVMP4FFCN_3GPP_DOWNLOAD_MODE) = 0; 156 157 /** 158 * Method to set the sample rate (i.e. timescale) for the overall Mpeg-4 presentation. 159 * This is an optional configuration API that should be called before Start() is called. 160 * 161 * @param aTimescale Timescale of MPEG4 presentation 162 * @return Completion status of this method. 163 */ 164 virtual PVMFStatus SetPresentationTimescale(uint32 aTimescale) = 0; 165 166 /** 167 * This method populates the version string. Version string contains 168 * information about the version of the author SDK/app that is authoring 169 * the clip. Currently only wide char strings are supported. 170 */ 171 /* This is an optional configuration API that should be called before Start() is called. 172 * 173 * @param aVersion version string. 174 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 175 * @return Completion status of this method. 176 */ 177 virtual PVMFStatus SetVersion(const OSCL_wString& aVersion, const OSCL_String& aLangCode) = 0; 178 179 /** 180 * This method populates the title string. Title string contains 181 * the title of the authored clip.Currently only wide char strings are supported. 182 */ 183 184 185 /* This is an optional configuration API that should be called before Start() is called. 186 * 187 * @param aTitle title string. 188 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 189 * @return Completion status of this method. 190 */ 191 virtual PVMFStatus SetTitle(const OSCL_wString& aTitle, const OSCL_String& aLangCode) = 0; 192 193 /** 194 * This method populates the author string. Title string information about 195 * the the author of the clip (actual user - like authored by grandma martha). 196 * Currently only wide char strings are supported. 197 */ 198 /* This is an optional configuration API that should be called before Start() is called. 199 * 200 * @param aAuthor author string. 201 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 202 * @return Completion status of this method. 203 */ 204 virtual PVMFStatus SetAuthor(const OSCL_wString& aAuthor, const OSCL_String& aLangCode) = 0; 205 206 207 /** 208 * This method populates the copyright string. We do not support the 209 * authoring of ISO defined copyright atom yet. This info is used to populate 210 * the PV proprietary user data atom. 211 */ 212 213 /* This is an optional configuration API that should be called before Start() is called. 214 * 215 * @param aCopyright Copyright string. 216 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 217 * @return Completion status of this method. 218 */ 219 virtual PVMFStatus SetCopyright(const OSCL_wString& aCopyright, const OSCL_String& aLangCode) = 0; 220 221 /** 222 * This method populates the description string. Description string contains 223 * some brief description of the clip (viz. surfing on the beach). Currently only 224 * wide char strings are supported. 225 */ 226 227 /* This is an optional configuration API that should be called before Start() is called. 228 * 229 * @param aDescription Description string. 230 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 231 * @return Completion status of this method. 232 */ 233 virtual PVMFStatus SetDescription(const OSCL_wString& aDescription, const OSCL_String& aLangCode) = 0; 234 235 /** 236 * This method populates the rating string. Rating string contains 237 * some information about the clip rating (viz.PG-13). Currently only 238 * wide char strings are supported. 239 */ 240 /* This is an optional configuration API that should be called before Start() is called. 241 * 242 * @param aRating Rating string. 243 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 244 * @return Completion status of this method. 245 */ 246 virtual PVMFStatus SetRating(const OSCL_wString& aRating, const OSCL_String& aLangCode) = 0; 247 248 /** 249 * This method ests the creation date in ISO 8601 format 250 * 251 * This is an optional configuration API that should be called before Start() is called. 252 * 253 * @param aCreationDate Creation date in ISO 8601 format. 254 * @return Completion status of this method. 255 */ 256 virtual PVMFStatus SetCreationDate(const OSCL_wString& aCreationDate) = 0; 257 258 /** 259 * This method sets the real time authoring mode where incoming timestamps 260 * are adjusted when authoring starts and checks are done to ensure that 261 * incremental timstamps do not have 0 or negative deltas. By default, this 262 * authoring mode is disabled. 263 * 264 * This is an optional configuration API that should be called before Start() is called. 265 * 266 * @param aRealTime Use real time authoring or not. 267 * @return Completion status of this method. 268 */ 269 virtual PVMFStatus SetRealTimeAuthoring(const bool aRealTime) = 0; 270 /* This is an optional configuration API that should be called before Start() is called. 271 * 272 * @param aAlbum_Title Album string. 273 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 274 * @return Completion status of this method. 275 */ 276 virtual PVMFStatus SetAlbumInfo(const OSCL_wString& aAlbum_Title, const OSCL_String& aLangCode) = 0; 277 /* This is an optional configuration API that should be called before Start() is called. 278 * 279 * @param aRecordingYear Recoding year. 280 * @return Completion status of this method. 281 */ 282 virtual PVMFStatus SetRecordingYear(uint16 aRecordingYear) = 0; 283 /** 284 * This method populates the performer string. Performer string contains information about 285 * the the performer of the clip. 286 * Currently only wide char strings are supported. 287 * Language code is currently used only in case of IMOTION authoring mode, 288 * to populate the IMOTION author info atom. 289 * 290 * This is an optional configuration API that should be called before Start() is called. 291 * 292 * @param aPerformer performer string. 293 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 294 * @return Completion status of this method. 295 */ 296 virtual PVMFStatus SetPerformer(const OSCL_wString& aPerformer, const OSCL_String& aLangCode) = 0; 297 298 /** 299 * This method populates the genre string. Genre string contains information about 300 * the the genre of the clip. 301 * Currently only wide char strings are supported. 302 * Language code is currently used only in case of IMOTION authoring mode, 303 * to populate the IMOTION author info atom. 304 * 305 * This is an optional configuration API that should be called before Start() is called. 306 * 307 * @param aGenre genre string. 308 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 309 * @return Completion status of this method. 310 */ 311 virtual PVMFStatus SetGenre(const OSCL_wString& aGenre, const OSCL_String& aLangCode) = 0; 312 313 /** 314 * This method populates the Classification string. classification string contains information about 315 * the the classification of the clip . 316 * Currently only wide char strings are supported. 317 * Language code is currently used only in case of IMOTION authoring mode, 318 * to populate the IMOTION author info atom. 319 * 320 * This is an optional configuration API that should be called before Start() is called. 321 * 322 * @param aClassificationInfo classification information string. 323 * @param aClassificationEntity classification Entity string. 324 * @param aClassificationTable classification Table string. 325 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 326 * @return Completion status of this method. 327 */ 328 virtual PVMFStatus SetClassification(const OSCL_wString& aClassificationInfo, uint32 aClassificationEntity, uint16 aClassificationTable, const OSCL_String& aLangCode) = 0; 329 /** 330 * This method populates the keyword string. keyword string contains information about 331 * the the keyword of the clip. 332 * Currently only wide char strings are supported. 333 * Language code is currently used only in case of IMOTION authoring mode, 334 * to populate the IMOTION author info atom. 335 * 336 * This is an optional configuration API that should be called before Start() is called. 337 * 338 * @param aKeyWordInfo Keyword information string. 339 * @param aLangCode OSCL_HeapString ISO-639-2/T Language code 340 * @return Completion status of this method. 341 */ 342 virtual PVMFStatus SetKeyWord(const OSCL_wString& aKeyWordInfo, const OSCL_String& aLangCode) = 0; 343 /** 344 * This method populates the LocationInfo string. LocationInfo string contains information about 345 * the the Location of the clip. 346 * 347 * This is an optional configuration API that should be called before Start() is called. 348 * 349 * @param aLocation_info Instance of class PvmfAssetInfo3GPPLocationStruct 350 * @return Completion status of this method. 351 */ 352 virtual PVMFStatus SetLocationInfo(PvmfAssetInfo3GPPLocationStruct& aLocation_info) = 0; 353 /** 354 * This method pouplates the aLang string. aLang contains the language code as a heap string and 355 * this function is used to convert the lang code into uint16 format and stores the lang code into 356 * the authored media file. 357 * @param aLang Language code in Heap String format, 358 * @return lang_code in a uint16 format. 359 */ 360 virtual uint16 ConvertLangCode(const OSCL_String& aLang) = 0; 361 }; 362 363 #endif // PVMP4FFCN_CLIPCONFIG_H_INCLUDED 364 365 366