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 #ifndef PVAUTHORENGINEINTERFACE_H_INCLUDED 19 #define PVAUTHORENGINEINTERFACE_H_INCLUDED 20 21 #ifndef OSCL_BASE_H_INCLUDED 22 #include "oscl_base.h" 23 #endif 24 #ifndef OSCL_STRING_H_INCLUDED 25 #include "oscl_string.h" 26 #endif 27 #ifndef PV_ENGINE_TYPES_H_INCLUDED 28 #include "pv_engine_types.h" 29 #endif 30 31 // Forward declarations 32 class PVMFNodeInterface; 33 class PVLoggerAppender; 34 template<class T, class Alloc> class Oscl_Vector; 35 36 /** 37 * An enumeration of the major states of the pvAuthor Engine. 38 */ 39 enum PVAEState 40 { 41 PVAE_STATE_IDLE = 0, 42 PVAE_STATE_OPENED, 43 PVAE_STATE_INITIALIZED, 44 PVAE_STATE_RECORDING, 45 PVAE_STATE_PAUSED, 46 PVAE_STATE_ERROR 47 }; 48 49 /** 50 * Enumeration of errors from pvAuthor Engine. 51 */ 52 enum PVAEErrorEvent 53 { 54 // TBD 55 PVAE_ENCODE_ERROR 56 }; 57 58 /** 59 * Enumeration of informational events from pvAuthor Engine. 60 */ 61 enum PVAEInfoEvent 62 { 63 // TBD 64 PVAE_OUTPUT_PROGRESS 65 }; 66 67 68 /** 69 * PVAuthorEngineInterface 70 **/ 71 class PVAuthorEngineInterface 72 { 73 public: 74 /** 75 * Destructor. 76 */ ~PVAuthorEngineInterface()77 virtual ~PVAuthorEngineInterface() {}; 78 79 /** 80 * Allows a logging appender to be attached at some point in the 81 * logger tag tree. The location in the tag tree is specified by the 82 * input tag string. A single appender can be attached multiple times in 83 * the tree, but it may result in duplicate copies of log messages if the 84 * appender is not attached in disjoint portions of the tree. 85 * A logging appender is responsible for actually writing the log message 86 * to its final location (e.g., memory, file, network, etc). 87 * Currently this API is NOT SUPPORTED. 88 * 89 * @param aTag Specifies the logger tree tag where the appender should be attached. 90 * @param aAppender The log appender to attach. 91 * @param aContextData 92 * Optional opaque data that will be passed back to the user with the command response 93 * 94 * @exception memory_error leaves on memory allocation error. 95 * 96 * @returns A unique command id for asynchronous completion 97 */ 98 virtual PVCommandId SetLogAppender(const char* aTag, PVLoggerAppender& aAppender, const OsclAny* aContextData = NULL) = 0; 99 100 /** 101 * Allows a logging appender to be removed from the logger tree at the 102 * point specified by the input tag. If the input tag is NULL then the 103 * appender will be removed from locations in the tree. 104 * Currently this API is NOT SUPPORTED. 105 * 106 * @param aTag Specifies the logger tree tag where the appender should be removed. 107 * Can be NULL to remove at all locations. 108 * @param aAppender The log appender to remove. 109 * @param aContextData 110 * Optional opaque data that will be passed back to the user with the command response 111 * 112 * @exception memory_error leaves on memory allocation error. 113 * 114 * @returns A unique command id for asynchronous completion 115 */ 116 virtual PVCommandId RemoveLogAppender(const char* aTag, PVLoggerAppender& aAppender, const OsclAny* aContextData = NULL) = 0; 117 118 /** 119 * Allows the logging level to be set for the logging node specified by the 120 * tag. A larger log level will result in more messages being logged. A message 121 * will only be logged if its level is LESS THAN or equal to the current log level. 122 * The set_subtree flag will allow an entire subtree, with the specified tag as the root, 123 * to be reset to the specified value. 124 * Currently this API is NOT SUPPORTED. 125 * 126 * @param aTag Specifies the logger tree tag where the log level should be set. 127 * @param aLevel Specifies the log level to set. 128 * @param aSetSubtree Specifies whether the entire subtree with aTag as the root should 129 * be reset to the log level. 130 * @param aContextData 131 * Optional opaque data that will be passed back to the user with the command response 132 * 133 * @exception memory_error leaves on memory allocation error. 134 * 135 * @returns A unique command id for asynchronous completion 136 */ 137 virtual PVCommandId SetLogLevel(const char* aTag, int32 aLevel, bool aSetSubtree = false, const OsclAny* aContextData = NULL) = 0; 138 139 /** 140 * Allows the logging level to be queried for a particular logging tag. 141 * A larger log level will result in more messages being logged. 142 * 143 * In the asynchronous response, this should return the log level along with an 144 * indication of where the level was inherited (i.e., the ancestor tag). 145 * Currently this API is NOT SUPPORTED. 146 * 147 * @param aTag Specifies the logger tree tag where the log level should be retrieved. 148 * @param aLogInfo An output parameter which will be filled in with the log level information. 149 * @param aContextData 150 * Optional opaque data that will be passed back to the user with the command response 151 * @exception memory_error leaves on memory allocation error. 152 * 153 * @returns A unique command id for asynchronous completion 154 */ 155 virtual PVCommandId GetLogLevel(const char* aTag, PVLogLevelInfo& aLogInfo, const OsclAny* aContextData = NULL) = 0; 156 157 /** 158 * Opens an authoring session. 159 * 160 * This command is valid only when pvAuthor engine is in PVAE_STATE_IDLE state. Upon completion 161 * of this method, pvAuthor engine will be in PVAE_STATE_OPENED state. 162 * 163 * @param aContextData Optional opaque data to be passed back to user with the command response 164 * @return Unique command ID to identify this command in command response 165 */ 166 virtual PVCommandId Open(const OsclAny* aContextData = NULL) = 0; 167 168 /** 169 * Closes an authoring session. 170 * 171 * All resources added and allocated to the authoring session will be released. 172 * 173 * This command is valid only when pvAuthor engine is in PVAE_STATE_OPENED state and Upon 174 * completion of this command, pvAuthor Engine will be in PVAE_STATE_IDLE state. 175 * 176 * @param aContextData Optional opaque data to be passed back to user with the command response 177 * @return Unique command ID to identify this command in command response 178 */ 179 virtual PVCommandId Close(const OsclAny* aContextData = NULL) = 0; 180 181 /** 182 * Adds a media source to be used as input to an authoring session. 183 * 184 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. 185 * This command does not change the pvAuthor Engine engine state. 186 * 187 * @param aDataSource Reference to the data source 188 * @param aContextData Optional opaque data to be passed back to user with the command response 189 * @return Unique command ID to identify this command in command response 190 */ 191 virtual PVCommandId AddDataSource(const PVMFNodeInterface& aDataSource, const OsclAny* aContextData = NULL) = 0; 192 193 /** 194 * Unbinds a previously added data source. 195 * 196 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. 197 * This command does not change the pvAuthor Engine engine state. 198 * 199 * @param aDataSource Reference to the data source to be removed 200 * @param aContextData Optional opaque data to be passed back to user with the command response 201 * @returns A unique command id for asynchronous completion 202 */ 203 virtual PVCommandId RemoveDataSource(const PVMFNodeInterface& aDataSource, const OsclAny* aContextData = NULL) = 0; 204 205 /** 206 * Selects an output composer by specifying its MIME type. 207 * 208 * pvAuthor engine will use the most suitable output composer of the specified MIME type available 209 * in the authoring session. This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED 210 * state. This command does not change the pvAuthor Engine state. 211 * 212 * Upon completion of this command, opaque data to indentify the selected composer is provided in the 213 * callback. The user needs to use this opaque data to identify the composer when calling AddMediaTrack(), 214 * AddDataSink(). A configuration interface for the selected composer will be 215 * saved to the PVInterface pointer provided in aConfigInterface parameter. User should call 216 * queryInterface to query for the configuration interfaces supported by the composer. When 217 * configuration is complete or before calling Reset(), user must call 218 * removeRef on the PVInterface object to remove its reference to the object. 219 * 220 * @param aComposerType MIME type of output composer to be used 221 * @param aConfigInterface Pointer to configuration object for the selected composer will be 222 * saved to this parameter upon completion of this call 223 * @param aContextData Optional opaque data to be passed back to user with the command response 224 * @returns A unique command id for asynchronous completion 225 */ 226 virtual PVCommandId SelectComposer(const PvmfMimeString& aComposerType, 227 PVInterface*& aConfigInterface, 228 const OsclAny* aContextData = NULL) = 0; 229 230 /** 231 * Selects an output composer by specifying its Uuid. 232 * 233 * pvAuthor engine the composer of the specified Uuid in the authoring session. 234 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. This command does 235 * not change the pvAuthor Engine state. 236 * 237 * Upon completion of this command, opaque data to indentify the selected composer is provided in the 238 * callback. The user needs to use this opaque data to identify the composer when calling AddMediaTrack(), 239 * AddDataSink(). A configuration interface for the selected composer will be 240 * saved to the PVInterface pointer provided in aConfigInterface parameter. User should call 241 * queryInterface to query for the configuration interfaces supported by the composer. When 242 * configuration is complete or before calling Reset(), user must call 243 * removeRef on the PVInterface object to remove its reference to the object. 244 * 245 * @param aComposerUuid Uuid of output composer to be used 246 * @param aConfigInterface Pointer to configuration object for the selected composer will be 247 * saved to this parameter upon completion of this call 248 * @param aContextData Optional opaque data to be passed back to user with the command response 249 * @returns A unique command id for asynchronous completion 250 */ 251 virtual PVCommandId SelectComposer(const PVUuid& aComposerUuid, 252 PVInterface*& aConfigInterface, 253 const OsclAny* aContextData = NULL) = 0; 254 255 /** 256 * Add a media track to the specified composer. 257 * 258 * The source data of this media track will come from the specified data source. pvAuthor engine 259 * will select the most suitable available encoder of the specified type. A media track will be 260 * added to the specified composer, and encoded data will be written to the composer during the 261 * authoring session. 262 * 263 * A configuration object for the selected composer will be saved to the PVInterface pointer 264 * provided in aConfigInterface parameter. User should call queryInterface to query for the 265 * configuration interfaces supported by the encoder. Before calling Reset(), user must call 266 * removeRef on the PVInterface object to remove its reference to the object. 267 * 268 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. The referenced 269 * data source and composer must be already added before this method is called. 270 * This command does not change the pvAuthor Engine engine state. 271 * 272 * @param aDataSource Data source node to provide input data 273 * @param aEncoderType MIME type of encoder to encode the source data 274 * @param aComposer Opaque data to identify the composer in which a media track will be added. 275 * @param aConfigInterface Pointer to configuration object for the selected encoder will be 276 * saved to this parameter upon completion of this call 277 * @param aContextData Optional opaque data to be passed back to user with the command response 278 * @returns A unique command id for asynchronous completion 279 */ 280 virtual PVCommandId AddMediaTrack(const PVMFNodeInterface& aDataSource, 281 const PvmfMimeString& aEncoderType, 282 const OsclAny* aComposer, 283 PVInterface*& aConfigInterface, 284 const OsclAny* aContextData = NULL) = 0; 285 286 /** 287 * Add a media track to the specified composer. 288 * 289 * The source data of this media track will come from the specified data source. pvAuthor engine 290 * will encoder of the specified Uuid to encode the source data. A media track will be 291 * added to the specified composer, and encoded data will be written to the composer during the 292 * authoring session. 293 * 294 * A configuration object for the selected composer will be saved to the PVInterface pointer 295 * provided in aConfigInterface parameter. User should call queryInterface to query for the 296 * configuration interfaces supported by the encoder. Before calling Reset(), user must call 297 * removeRef on the PVInterface object to remove its reference to the object. 298 * 299 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. The referenced 300 * data source and composer must be already added before this method is called. 301 * This command does not change the pvAuthor Engine engine state. 302 * 303 * @param aDataSource Data source node to provide input data 304 * @param aEncoderUuid Uuid of encoder to encode the source data 305 * @param aComposer Opaque data to identify the composer in which a media track will be added. 306 * @param aConfigInterface Pointer to configuration object for the selected encoder will be 307 * saved to this parameter upon completion of this call 308 * @param aContextData Optional opaque data to be passed back to user with the command response 309 * @returns A unique command id for asynchronous completion 310 */ 311 virtual PVCommandId AddMediaTrack(const PVMFNodeInterface& aDataSource, 312 const PVUuid& aEncoderUuid, 313 const OsclAny* aComposer, 314 PVInterface*& aConfigInterface, 315 const OsclAny* aContextData = NULL) = 0; 316 317 /** 318 * Adds a media sink where output data from the specified composer will be written to. 319 * Currently this API does not cause any action as it is not relevant. 320 * 321 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. The 322 * referenced composer must be previously selected. 323 * 324 * This command does not change the pvAuthor Engine engine state. 325 * 326 * @param aDataSink Reference to the data sink to be used 327 * @param aComposer Opaque data identifying the composer to which the data sink will connect to. 328 * @param aContextData Optional opaque data to be passed back to user with the command response 329 * @returns A unique command id for asynchronous completion 330 */ 331 virtual PVCommandId AddDataSink(const PVMFNodeInterface& aDataSink, 332 const OsclAny* aComposer, 333 const OsclAny* aContextData = NULL) = 0; 334 335 /** 336 * Removes a previously added data sink. 337 * Currently this API does not cause any action as it is not relevant. 338 339 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. 340 * This command does not change the pvAuthor Engine engine state. 341 * 342 * @param aDataSink Reference to the data sink to be removed 343 * @param aContextData Optional opaque data to be passed back to user with the command response 344 * @returns A unique command id for asynchronous completion 345 */ 346 virtual PVCommandId RemoveDataSink(const PVMFNodeInterface& aDataSink, const OsclAny* aContextData = NULL) = 0; 347 348 349 /** 350 * Initialize an authoring session. 351 * 352 * Upon calling this method, no more data sources and sinks can be added to the 353 * session. Also, all configuration settings will be locked and cannot 354 * be modified until the session is reset by calling Reset(). Resources for the 355 * session will allocated and initialized to the configuration settings specified. 356 * This command is valid only when pvAuthor Engine is in PVAE_STATE_OPENED state. 357 * 358 * Upon completion of this command, pvAuthor Engine will be in PVAE_STATE_INITIALIZED 359 * state, and the authoring session is ready to start. 360 * 361 * @param aContextData Optional opaque data to be passed back to user with the command response 362 * @returns A unique command id for asynchronous completion 363 */ 364 virtual PVCommandId Init(const OsclAny* aContextData = NULL) = 0; 365 366 /** 367 * Reset an initialized authoring session. 368 * 369 * The authoring session will be stopped and all composers and encoders selected for 370 * the session will be removed. All data sources and sinks will be reset but will 371 * continue to be available for authoring the next output clip. 372 * 373 * User must call removeRef() to remove its reference to any PVInterface objects 374 * received from SelectComposer() or AddMediaTrack() or QueryInterface() APIs 375 * before calling this method. This method would fail otherwise. 376 * 377 * This method can be called from ANY state but PVAE_STATE_IDLE. Upon completion of this command, pvAuthor 378 * Engine will be in PVAE_STATE_OPENED state. 379 * 380 * @param aContextData Optional opaque data to be passed back to user with the command response 381 * @returns A unique command id for asynchronous completion 382 */ 383 virtual PVCommandId Reset(const OsclAny* aContextData = NULL) = 0; 384 385 /** 386 * Start the authoring session. 387 * 388 * pvAuthor Engine will begin to receive source data, encode them to the specified format 389 * and quality, and send the output data to the specified data sinks. 390 * This function is valid only in the PVAE_STATE_INITIALIZED state. 391 * 392 * Upon completion of this command, pvAuthor Engine will be in PVAE_STATE_RECORDING state. 393 * 394 * @param aContextData Optional opaque data to be passed back to user with the command response 395 * @returns A unique command id for asynchronous completion 396 */ 397 virtual PVCommandId Start(const OsclAny* aContextData = NULL) = 0; 398 399 /** 400 * Pause the authoring session. 401 * 402 * The authoring session will be paused and no encoded output data will be sent to 403 * the data sink. This function is valid only in the PVAE_STATE_RECORDING state. 404 * 405 * Upon completion of this command, pvAuthor Engine will be in PVAE_STATE_PAUSED state. 406 * 407 * @param aContextData Optional opaque data to be passed back to user with the command response 408 * @returns A unique command id for asynchronous completion 409 */ 410 virtual PVCommandId Pause(const OsclAny* aContextData = NULL) = 0; 411 412 /** 413 * Resume a paused authoring session. 414 * 415 * The authoring session will be resumed and pvAuthor Engine will resume sending encoded 416 * output data to the data sinks. This function is valid only in the PVAE_STATE_PAUSED state. 417 * 418 * Upon completion of this command, pvAuthor Engine will be in PVAE_STATE_RECORDING state. 419 * 420 * @param aContextData Optional opaque data to be passed back to user with the command response 421 * @returns A unique command id for asynchronous completion 422 */ 423 virtual PVCommandId Resume(const OsclAny* aContextData = NULL) = 0; 424 425 /** 426 * Stops an authoring session. 427 * 428 * The authoring session will be stopped and pvAuthor Engine will stop receiving source data 429 * from the data sources, and no further encoded data will be sent to the data sinks. 430 * This function is valid only in the PVAE_STATE_RECORDING and PVAE_STATE_PAUSED states. 431 * 432 * Upon completion of this command, pvAuthor Engine will be in PVAE_STATE_INITIALIZED state. 433 * 434 * @param aContextData Optional opaque data to be passed back to user with the command response 435 * @returns A unique command id for asynchronous completion 436 */ 437 virtual PVCommandId Stop(const OsclAny* aContextData = NULL) = 0; 438 439 /** 440 * This function returns the current state of the pvAuthor Engine. 441 * Application may use this info for updating display or determine if the pvAuthor Engine is 442 * ready for the next command. 443 * 444 * @param aState Output parameter to hold state information 445 * @param aContextData Optional opaque data to be passed back to user with the command response 446 * @returns A unique command id for synchronous completion 447 */ 448 virtual PVAEState GetPVAuthorState() = 0; 449 450 /** 451 * Discover the UUIDs of interfaces associated with the specified MIME type and node 452 * 453 * This API is to allow for extensibility of the pvAuthor Engine interface. User can query for 454 * all UUIDs associated with a particular MIME type. The UUIDs will be added to the aUuids 455 * vector provided by the user. 456 * Currently this API is NOT SUPPORTED. 457 * 458 * @param aMimeType The MIME type of the desired interfaces 459 * @param aUuids A vector to hold the discovered UUIDs 460 * @param aExactUuidsOnly Turns on/off the retrival of UUIDs with aMimeType as a base type 461 * @param aContextData Optional opaque data to be passed back to user with the command response 462 * @returns A unique command id for asynchronous completion 463 */ 464 virtual PVCommandId QueryUUID(const PvmfMimeString& aMimeType, 465 Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids, 466 bool aExactUuidsOnly = false, 467 const OsclAny* aContextData = NULL) = 0; 468 469 /** 470 * This API is to allow for extensibility of the pvAuthor engine interface. 471 * It allows a caller to ask for an instance of a particular interface object to be returned. 472 * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with 473 * an interface ID that is a UUID as in DCE and a pointer to the interface object is 474 * returned if it is supported. Otherwise the returned pointer is NULL. 475 * TBD: Define the UIID, InterfacePtr structures 476 * 477 * @param aUuid The UUID of the desired interface 478 * @param aInterfacePtr The output pointer to the desired interface 479 * @param aContextData Optional opaque data to be passed back to user with the command response 480 * @returns A unique command id for asynchronous completion 481 */ 482 virtual PVCommandId QueryInterface(const PVUuid& aUuid, 483 PVInterface*& aInterfacePtr, 484 const OsclAny* aContextData = NULL) = 0; 485 486 /** 487 * Returns information about all modules currently used by the SDK. 488 * Currently this API is NOT SUPPORTED. 489 * 490 * @param aSDKModuleInfo A reference to a PVSDKModuleInfo structure which contains 491 * the number of modules currently used by pvAuthor Engine and the PV UID and description 492 * string for each module. The PV UID and description string for modules will be 493 * returned in one string buffer allocated by the client. If the string buffer is not 494 * large enough to hold the all the module's information, the information will be written 495 * up to the length of the buffer and truncated. 496 * @param aContextData Optional opaque data that will be passed back to the user with the command response 497 * @returns A unique command id for asynchronous completion 498 */ 499 virtual PVCommandId GetSDKModuleInfo(PVSDKModuleInfo& aSDKModuleInfo, const OsclAny* aContextData = NULL) = 0; 500 501 /** 502 * Cancel all pending requests. The current request being processed, if any, will also be aborted. 503 * PVAE_CMD_CANCEL_ALL_COMMANDS will be passed to the command observer on completion. 504 * Currently this API is NOT SUPPORTED. 505 * 506 * @param aContextData Optional opaque data that will be passed back to the user with the command response 507 * @returns A unique command id for asynchronous completion 508 */ 509 virtual PVCommandId CancelAllCommands(const OsclAny* aContextData = NULL) = 0; 510 511 /** 512 * Returns SDK version information about author engine. 513 * 514 * @param aSDKInfo 515 * A reference to a PVSDKInfo structure which contains product name, supported hardware platform, 516 * supported software platform, version, part number, and PV UUID. These fields will contain info 517 * .for the currently instantiated pvPlayer engine when this function returns success. 518 * 519 **/ 520 OSCL_IMPORT_REF static void GetSDKInfo(PVSDKInfo& aSDKInfo); 521 }; 522 523 #endif // PVAUTHORENGINE_H_INCLUDED 524 525 526