1 /* 2 * Copyright (C) 2011 The Android Open Source Project 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 express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 /** 17 ************************************************************************ 18 * @file M4READER_Common.h 19 * @brief Shell Reader common interface declaration 20 * @note This file declares the common interfaces that reader shells must implement 21 * 22 ************************************************************************ 23 */ 24 #ifndef __M4READER_COMMON_H__ 25 #define __M4READER_COMMON_H__ 26 27 #include "M4OSA_Types.h" 28 #include "M4OSA_Error.h" 29 #include "M4OSA_FileReader.h" 30 #include "M4OSA_CoreID.h" 31 #include "M4DA_Types.h" 32 #include "M4Common_types.h" 33 34 /* ERRORS */ 35 #define M4ERR_READER_UNKNOWN_STREAM_TYPE M4OSA_ERR_CREATE(M4_ERR, M4READER_COMMON, 0x0001) 36 37 /* WARNINGS */ 38 #define M4WAR_READER_NO_METADATA M4OSA_ERR_CREATE(M4_WAR, M4READER_COMMON, 0x0001) 39 #define M4WAR_READER_INFORMATION_NOT_PRESENT M4OSA_ERR_CREATE(M4_WAR, M4READER_COMMON, 0x0002) 40 41 42 /** 43 ************************************************************************ 44 * enum M4READER_MediaType 45 * @brief This enum defines the Media types used to create media readers 46 * @note This enum is used internally by the VPS to identify a currently supported 47 * media reader interface. Each reader is registered with one of this type associated. 48 * When a reader instance is needed, this type is used to identify and 49 * and retrieve its interface. 50 ************************************************************************ 51 */ 52 typedef enum 53 { 54 M4READER_kMediaTypeUnknown = -1, /**< Unknown media type */ 55 M4READER_kMediaType3GPP = 0, /**< 3GPP file media type */ 56 M4READER_kMediaTypeAVI = 1, /**< AVI file media type */ 57 M4READER_kMediaTypeAMR = 2, /**< AMR file media type */ 58 M4READER_kMediaTypeMP3 = 3, /**< MP3 file media type */ 59 M4READER_kMediaTypeRTSP = 4, /**< RTSP network accessed media type */ 60 M4READER_kMediaType3GPPHTTP = 5, /**< Progressively downloaded 3GPP file media type */ 61 M4READER_kMediaTypePVHTTP = 6, /**< Packet Video HTTP proprietary type */ 62 M4READER_kMediaTypeWAV = 7, /**< WAV file media type */ 63 M4READER_kMediaType3GPEXTHTTP = 8, /**< An external progressively downloaded 3GPP file 64 media type */ 65 M4READER_kMediaTypeAAC = 9, /**< ADTS and ADIF AAC support */ 66 M4READER_kMediaTypeREAL = 10, /**< REAL Media type */ 67 M4READER_kMediaTypeASF = 11, /**< ASF Media type */ 68 M4READER_kMediaTypeFLEXTIME = 12, /**< FlexTime Media type */ 69 M4READER_kMediaTypeBBA = 13, /**< Beatbrew audio Media type */ 70 M4READER_kMediaTypeSYNTHAUDIO = 14, /**< Synthesis audio Media type */ 71 M4READER_kMediaTypePCM = 15, /**< PCM Media type */ 72 M4READER_kMediaTypeJPEG = 16, /**< JPEG Media type */ 73 M4READER_kMediaTypeGIF = 17, /**< GIF Media type */ 74 M4READER_kMediaTypeADIF = 18, /**< AAC-ADTS Media type */ 75 M4READER_kMediaTypeADTS = 19, /**< AAC-ADTS Media type */ 76 77 M4READER_kMediaType_NB /* number of readers, keep it as last enum entry */ 78 79 } M4READER_MediaType; 80 81 /** 82 ************************************************************************ 83 * enum M4READER_MediaFamily 84 * @brief This enum defines the Media family of a stream 85 * @note This enum is used internally by the VPS to identify what kind of stream 86 * has been retrieved via getNextStream() function. 87 ************************************************************************ 88 */ 89 typedef enum 90 { 91 M4READER_kMediaFamilyUnknown = -1, 92 M4READER_kMediaFamilyVideo = 0, 93 M4READER_kMediaFamilyAudio = 1, 94 M4READER_kMediaFamilyText = 2 95 } M4READER_MediaFamily; 96 97 98 99 /** 100 ************************************************************************ 101 * enum M4READER_OptionID 102 * @brief This enum defines the reader options 103 * @note These options can be read from a reader via M4READER_getOption_fct 104 ************************************************************************ 105 */ 106 typedef enum 107 { 108 /** 109 Get the duration of the movie (in ms) 110 */ 111 M4READER_kOptionID_Duration = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0), 112 113 /** 114 Get the version of the core reader 115 */ 116 M4READER_kOptionID_Version = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 1), 117 118 /** 119 Get the copyright from the media (if present) 120 (currently implemented for 3GPP only: copyright get from the cprt atom in the udta if present) 121 */ 122 M4READER_kOptionID_Copyright= M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 2), 123 124 125 /** 126 Set the OSAL file reader functions to the reader (type of value: M4OSA_FileReadPointer*) 127 */ 128 M4READER_kOptionID_SetOsaFileReaderFctsPtr = M4OSA_OPTION_ID_CREATE(M4_READ,\ 129 M4READER_COMMON, 3), 130 131 /** 132 Set the OSAL file writer functions to the reader (type of value: M4OSA_FileWriterPointer*) 133 */ 134 M4READER_kOptionID_SetOsaFileWriterFctsPtr = M4OSA_OPTION_ID_CREATE(M4_READ,\ 135 M4READER_COMMON, 4), 136 137 /** 138 Set the OSAL file writer functions to the reader (type of value: M4OSA_NetFunction*) 139 */ 140 M4READER_kOptionID_SetOsaNetFctsPtr = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 5), 141 142 /** 143 Creation time in sec. since midnight, Jan. 1, 1970 (type of value: M4OSA_UInt32*) 144 (available only for 3GPP content, including PGD) 145 */ 146 M4READER_kOptionID_CreationTime = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 6), 147 148 /** 149 Bitrate in bps (type of value: M4OSA_Double*) 150 */ 151 M4READER_kOptionID_Bitrate = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 7), 152 153 /** 154 Tag ID3v1 of MP3 source (type of value: M4MP3R_ID3Tag*) 155 */ 156 M4READER_kOptionID_Mp3Id3v1Tag = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 8), 157 158 /** 159 Tag ID3v2 of MP3 source (type of value: M4MP3R_ID3Tag*) 160 */ 161 M4READER_kOptionID_Mp3Id3v2Tag = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 9), 162 163 /** 164 Number of Access Unit in the Audio stream (type of value: M4OSA_UInt32*) 165 */ 166 M4READER_kOptionID_GetNumberOfAudioAu = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0xA), 167 168 /** 169 Number of frames per bloc 170 */ 171 M4READER_kOptionID_GetNbframePerBloc = M4OSA_OPTION_ID_CREATE(M4_READ,\ 172 M4READER_COMMON, 0xB), 173 174 /** 175 Flag for protection presence 176 */ 177 M4READER_kOptionID_GetProtectPresence = M4OSA_OPTION_ID_CREATE(M4_READ,\ 178 M4READER_COMMON, 0xC), 179 180 /** 181 Set DRM Context 182 */ 183 M4READER_kOptionID_SetDRMContext = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0xD), 184 185 /** 186 Get ASF Content Description Object 187 */ 188 M4READER_kOptionID_ContentDescription = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0xE), 189 190 /** 191 Get ASF Content Description Object 192 */ 193 M4READER_kOptionID_ExtendedContentDescription = M4OSA_OPTION_ID_CREATE(M4_READ,\ 194 M4READER_COMMON, 0xF), 195 196 /** 197 Get Asset 3gpp Fields 198 */ 199 M4READER_kOptionID_3gpAssetFields = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x10), 200 201 /** 202 Set the max metadata size supported in the reader 203 Only relevant in 3gp parser till now, but can be used for other readers 204 */ 205 M4READER_kOptionID_MaxMetadataSize = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_COMMON, 0x11), 206 207 M4READER_kOptionID_GetMetadata = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x12), 208 /** 209 Get 3gpp 'ftyp' atom 210 */ 211 M4READER_kOptionID_3gpFtypBox = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x13), 212 213 214 /* value is M4OSA_Bool* */ 215 /* return the drm protection status of the file*/ 216 M4READER_kOptionID_isProtected = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x14), 217 218 /* value is a void* */ 219 /* return the aggregate rights of the file*/ 220 /* The buffer must be allocated by the application and must be big enough*/ 221 /* By default, the size for WMDRM is 76 bytes */ 222 M4READER_kOptionID_getAggregateRights = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x15), 223 /** 224 Get ASF Content Description Object 225 */ 226 M4READER_kOptionID_ExtendedContentEncryption = M4OSA_OPTION_ID_CREATE(M4_READ,\ 227 M4READER_COMMON, 0x16), 228 229 /** 230 Number of Access Unit in the Video stream (type of value: M4OSA_UInt32*) 231 */ 232 M4READER_kOptionID_GetNumberOfVideoAu = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x17), 233 234 /** 235 Chunk mode activation size in case of JPG reader */ 236 M4READER_kOptionID_JpegChunckSize = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x18), 237 238 /** 239 Check if ASF file contains video */ 240 M4READER_kOptionID_hasVideo = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x19), 241 242 /** 243 Set specific read mode for Random Access JPEG */ 244 M4READER_kOptionID_JpegRAMode = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_COMMON, 0x20), 245 246 /** 247 Get Thumbnail buffer in case of JPG reader */ 248 M4READER_kOptionID_JpegThumbnail = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x21), 249 250 /** 251 Get FPDATA buffer in case of JPG reader */ 252 M4READER_kOptionID_JpegFPData = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x22), 253 254 /** 255 Get JPEG info (progressive, subsampling) */ 256 M4READER_kOptionID_JpegInfo= M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_COMMON, 0x23) 257 258 259 /*****************************************/ 260 } M4READER_OptionID; 261 /*****************************************/ 262 263 /** 264 ************************************************************************ 265 * structure M4READER_CopyRight 266 * @brief This structure defines a copyRight description 267 * @note This structure is used to retrieve the copyRight of the media 268 * (if present) via the getOption() function 269 ************************************************************************ 270 */ 271 typedef struct _M4READER_CopyRight 272 { 273 /** 274 Pointer to copyright data (allocated by user) 275 */ 276 M4OSA_UInt8* m_pCopyRight; 277 278 /** 279 Pointer to copyright size. The pCopyRightSize must 280 be Initialized with the size available in the pCopyRight buffer 281 */ 282 M4OSA_UInt32 m_uiCopyRightSize; 283 284 } M4READER_CopyRight; 285 286 287 288 /** 289 ************************************************************************ 290 * structure M4READER_StreamDataOption 291 * @brief This structure defines a generic stream data option 292 * @note It is used is used to set or get a stream specific data defined 293 * by a relevant reader option ID. 294 ************************************************************************ 295 */ 296 typedef struct _M4READER_StreamDataOption 297 { 298 M4_StreamHandler* m_pStreamHandler; /**< identifier of the stream */ 299 M4OSA_Void* m_pOptionValue; /**< value of the data option to get or to set */ 300 301 } M4READER_StreamDataOption; 302 303 /** 304 ************************************************************************ 305 * enumeration M4_EncodingFormat 306 * @brief Text encoding format 307 ************************************************************************ 308 */ 309 // typedef enum 310 // { 311 // M4_kEncFormatUnknown = 0, /**< Unknown format */ 312 // M4_kEncFormatASCII = 1, /**< ISO-8859-1. Terminated with $00 */ 313 // M4_kEncFormatUTF8 = 2, /**< UTF-8 encoded Unicode . Terminated with $00 */ 314 // M4_kEncFormatUTF16 = 3 /**< UTF-16 encoded Unicode. Terminated with $00 00 */ 315 /*} M4_EncodingFormat;*/ 316 317 /** 318 ************************************************************************ 319 * structure M4_StringAttributes 320 * @brief This structure defines string attribute 321 ************************************************************************ 322 */ 323 // typedef struct 324 // { 325 // M4OSA_Void* m_pString; /**< Pointer to text */ 326 // M4OSA_UInt32 m_uiSize; /**< Size of text */ 327 // M4_EncodingFormat m_EncodingFormat; /**< Text encoding format */ 328 // } M4_StringAttributes; 329 330 331 /** 332 ************************************************************************ 333 * structure M4READER_Buffer 334 * @brief This structure defines a buffer in all readers 335 ************************************************************************ 336 */ 337 typedef struct 338 { 339 M4OSA_UInt8* m_pData; 340 M4OSA_UInt32 m_uiBufferSize; 341 } M4READER_Buffer; 342 343 typedef struct 344 { 345 M4OSA_UInt32 m_uiSessionId; 346 M4OSA_UInt32 m_uiMediaId; 347 M4OSA_UInt32 m_uiNbInstance; 348 M4OSA_Char** m_pInstance; 349 } M4_SdpAssetInstance; 350 /* 351 typedef enum 352 { 353 M4READER_kUnknownFormat = 0, 354 M4READER_kTagID3V1, 355 M4READER_kTagID3V2, 356 M4READER_kASFContentDesc, 357 M4READER_k3GppAssetBoxFromUDTA, 358 M4READER_k3GppAssetBoxFromSDP, 359 M4READER_kJpegExif 360 } M4READER_MetaDataType;*/ 361 362 363 /** 364 ************************************************************************ 365 * structure M4_3gpAssetFields 366 * @brief This structure defines fields of a 3gpp asset information 367 ************************************************************************ 368 */ 369 typedef struct 370 { 371 M4COMMON_MetaDataFields m_metadata; 372 373 M4OSA_UInt32 m_uiSessionID; /* For SDP */ 374 M4OSA_UInt32 m_uiMediaID; /* For SDP */ 375 376 377 /* Note: The two following fields were added for internal use 378 (For Music manager project..) !! */ 379 M4_StreamType m_VideoStreamType; /**< Video stream type */ 380 M4_StreamType m_AudioStreamType; /**< Audio stream type */ 381 382 } M4_MetaDataFields; 383 384 385 #define M4_METADATA_STR_NB 22 /* one string in album art structure*/ 386 387 typedef struct 388 { 389 M4OSA_UInt32 m_uiNbBuffer; 390 M4_SdpAssetInstance* m_pAssetInfoInst; /* Set of 3gpp asset boxes */ 391 M4COMMON_MetaDataAlbumArt m_albumArt; /* RC: PV specific album art:added 392 here because this type is used by 393 union below in streaming */ 394 395 } M4READER_netInfos; 396 397 398 typedef union 399 { 400 M4READER_Buffer m_pTagID3Buffer[2]; /* Tag ID3 V1, V2 */ 401 struct 402 { 403 M4READER_Buffer m_pAsfDescContent; /* ASF description content buffer */ 404 M4READER_Buffer m_pAsfExtDescContent; /* ASF extended description content buffer */ 405 } m_asf; 406 M4_MetaDataFields m_pMetadataFields; /* Already parsed and filled 3gpp asset fields */ 407 M4READER_netInfos m_pAssetInfoInstance; /* Set of 3gpp asset boxes in the sdp file */ 408 409 } M4_MetadataBuffer; 410 411 412 413 414 /*********** READER GLOBAL Interface ************************************/ 415 416 /** 417 ************************************************************************ 418 * @brief create an instance of the reader 419 * @note create the context 420 * @param pContext: (OUT) pointer on a reader context 421 * @return M4NO_ERROR there is no error 422 * @return M4ERR_PARAMETER at least one parameter is not properly set 423 * @return M4ERR_ALLOC a memory allocation has failed 424 ************************************************************************ 425 */ 426 typedef M4OSA_ERR (M4READER_create_fct) (M4OSA_Context* pContext); 427 428 /** 429 ************************************************************************ 430 * @brief destroy the instance of the reader 431 * @note after this call the context is invalid 432 * @param context: (IN) Context of the reader 433 * @return M4NO_ERROR there is no error 434 * @return M4ERR_PARAMETER at least one parameter is not properly set 435 ************************************************************************ 436 */ 437 typedef M4OSA_ERR (M4READER_destroy_fct) (M4OSA_Context context); 438 439 440 /** 441 ************************************************************************ 442 * @brief open the reader and initializes its created instance 443 * @note this function, for the network reader, sends the DESCRIBE 444 * @param context: (IN) Context of the reader 445 * @param pFileDescriptor: (IN) Pointer to proprietary data identifying the media to open 446 * @return M4NO_ERROR there is no error 447 * @return M4ERR_PARAMETER the context is NULL 448 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 449 ************************************************************************ 450 */ 451 typedef M4OSA_ERR (M4READER_open_fct) (M4OSA_Context context, M4OSA_Void* pFileDescriptor); 452 453 454 /** 455 ************************************************************************ 456 * @brief close the reader 457 * @note 458 * @param context: (IN) Context of the reader 459 * @return M4NO_ERROR there is no error 460 * @return M4ERR_PARAMETER the context is NULL 461 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 462 ************************************************************************ 463 */ 464 typedef M4OSA_ERR (M4READER_close_fct) (M4OSA_Context context); 465 466 467 468 /** 469 ************************************************************************ 470 * @brief Get the next stream found in the media 471 * @note 472 * @param context: (IN) Context of the reader 473 * @param pMediaFamily: (OUT) pointer to a user allocated M4READER_MediaFamily that will 474 * be filled with the media family of the found stream 475 * @param pStreamHandler: (OUT) pointer to a stream handler that will be allocated and 476 * filled with the found stream description 477 * @return M4NO_ERROR there is no error 478 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 479 * @return M4ERR_PARAMETER at least one parameter is not properly set 480 * @return M4WAR_NO_MORE_STREAM no more available stream in the media (all streams found) 481 ************************************************************************ 482 */ 483 typedef M4OSA_ERR (M4READER_getNextStream_fct) (M4OSA_Context context, 484 M4READER_MediaFamily *pMediaFamily, 485 M4_StreamHandler **pStreamHandler); 486 487 488 /** 489 ************************************************************************ 490 * @brief fill the access unit structure with initialization values 491 * @note 492 * @param context: (IN) Context of the reader 493 * @param pStreamHandler: (IN) pointer to the stream handler to which the access unit 494 * will be associated 495 * @param pAccessUnit: (IN/OUT) pointer to the access unit (allocated by the caller) 496 * to initialize 497 * @return M4NO_ERROR there is no error 498 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 499 * @return M4ERR_PARAMETER at least one parameter is not properly set 500 * @return M4ERR_ALLOC there is no more memory available 501 ************************************************************************ 502 */ 503 typedef M4OSA_ERR (M4READER_fillAuStruct_fct) (M4OSA_Context context, 504 M4_StreamHandler *pStreamHandler, 505 M4_AccessUnit *pAccessUnit); 506 507 /** 508 ************************************************************************ 509 * @brief starts the instance of the reader 510 * @note only needed for network until now... 511 * @param context: (IN) Context of the reader 512 * @return M4NO_ERROR there is no error 513 * @return M4ERR_PARAMETER the context is NULL 514 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 515 ************************************************************************ 516 */ 517 typedef M4OSA_ERR (M4READER_start_fct) (M4OSA_Context context); 518 519 /** 520 ************************************************************************ 521 * @brief stop reading 522 * @note only needed for network until now... (makes a pause) 523 * @param context: (IN) Context of the reader 524 * @return M4NO_ERROR there is no error 525 * @return M4ERR_PARAMETER the context is NULL 526 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 527 ************************************************************************ 528 */ 529 typedef M4OSA_ERR (M4READER_stop_fct) (M4OSA_Context context); 530 531 532 /** 533 ************************************************************************ 534 * @brief get an option value from the reader 535 * @note this function follows the set/get option mechanism described in OSAL 3.0 536 * it allows the caller to retrieve a property value: 537 * -the duration of the longest stream of the media 538 * -the version number of the reader 539 * 540 * @param context: (IN) Context of the reader 541 * @param optionId: (IN) indicates the option to get 542 * @param pValue: (OUT) pointer to structure or value (allocated by user) 543 * where option is stored 544 * 545 * @return M4NO_ERROR there is no error 546 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 547 * @return M4ERR_PARAMETER at least one parameter is not properly set 548 * @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 549 ************************************************************************ 550 */ 551 typedef M4OSA_ERR (M4READER_getOption_fct) (M4OSA_Context context, M4OSA_OptionID optionId, 552 M4OSA_DataOption pValue); 553 554 555 /** 556 ************************************************************************ 557 * @brief set en option value of the readder 558 * @note this function follows the set/get option mechanism described in OSAL 3.0 559 * it allows the caller to set a property value: 560 * - nothing for the moment 561 * 562 * @param context: (IN) Context of the reader 563 * @param optionId: (IN) indicates the option to set 564 * @param pValue: (IN) pointer to structure or value (allocated by user) where 565 * option is stored 566 * 567 * @return M4NO_ERROR there is no error 568 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 569 * @return M4ERR_PARAMETER at least one parameter is not properly set 570 * @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 571 ************************************************************************ 572 */ 573 typedef M4OSA_ERR (M4READER_setOption_fct) (M4OSA_Context context, M4OSA_OptionID optionId, 574 M4OSA_DataOption pValue); 575 576 577 /** 578 ************************************************************************ 579 * @brief jump into the stream at the specified time 580 * @note 581 * @param context: (IN) Context of the reader 582 * @param pStreamHandler (IN) the stream handler of the stream to make jump 583 * @param pTime (IN/OUT) IN: the time to jump to (in ms) 584 * OUT: the time to which the stream really jumped 585 * @return M4NO_ERROR there is no error 586 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 587 * @return M4ERR_PARAMETER at least one parameter is not properly set 588 * @return M4ERR_ALLOC there is no more memory available 589 * @return M4ERR_BAD_STREAM_ID the streamID does not exist 590 ************************************************************************ 591 */ 592 typedef M4OSA_ERR (M4READER_jump_fct) (M4OSA_Context context, 593 M4_StreamHandler *pStreamHandler, 594 M4OSA_Int32* pTime); 595 596 597 /** 598 ************************************************************************ 599 * @brief reset the stream, that is seek it to beginning and make it ready to be read 600 * @note 601 * @param context: (IN) Context of the reader 602 * @param pStreamHandler (IN) The stream handler of the stream to reset 603 * @return M4NO_ERROR there is no error 604 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 605 * @return M4ERR_PARAMETER at least one parameter is not properly set 606 * @return M4ERR_ALLOC there is no more memory available 607 * @return M4ERR_BAD_STREAM_ID the streamID does not exist 608 ************************************************************************ 609 */ 610 typedef M4OSA_ERR (M4READER_reset_fct) (M4OSA_Context context, 611 M4_StreamHandler *pStreamHandler); 612 613 614 /** 615 ************************************************************************ 616 * @brief get the time of the closest RAP access unit before the given time 617 * @note 618 * @param context: (IN) Context of the reader 619 * @param pStreamHandler (IN) the stream handler of the stream to search 620 * @param pTime (IN/OUT) IN: the time to search from (in ms) 621 * OUT: the time (cts) of the preceding RAP AU. 622 * @return M4NO_ERROR there is no error 623 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 624 * @return M4ERR_PARAMETER at least one parameter is not properly set 625 * @return M4ERR_BAD_STREAM_ID the streamID does not exist 626 ************************************************************************ 627 */ 628 typedef M4OSA_ERR (M4READER_getPrevRapTime_fct) (M4OSA_Context context, 629 M4_StreamHandler *pStreamHandler, 630 M4OSA_Int32* pTime); 631 632 633 /** 634 ************************************************************************ 635 * structure M4READER_GlobalInterface 636 * @brief This structure defines the generic media reader GLOBAL interface 637 * @note This structure stores the pointers to functions concerning 638 * creation and control of one reader type. 639 * The reader type is one of the M4READER_MediaType 640 ************************************************************************ 641 */ 642 typedef struct _M4READER_GlobalInterface 643 /*****************************************/ 644 { 645 M4READER_create_fct* m_pFctCreate; 646 M4READER_destroy_fct* m_pFctDestroy; 647 M4READER_open_fct* m_pFctOpen; 648 M4READER_close_fct* m_pFctClose; 649 M4READER_getOption_fct* m_pFctGetOption; 650 M4READER_setOption_fct* m_pFctSetOption; 651 M4READER_getNextStream_fct* m_pFctGetNextStream; 652 M4READER_fillAuStruct_fct* m_pFctFillAuStruct; 653 M4READER_start_fct* m_pFctStart; 654 M4READER_stop_fct* m_pFctStop; 655 M4READER_jump_fct* m_pFctJump; 656 M4READER_reset_fct* m_pFctReset; 657 M4READER_getPrevRapTime_fct* m_pFctGetPrevRapTime; 658 659 } M4READER_GlobalInterface; 660 661 662 /************* READER DATA Interface ************************************/ 663 664 665 666 /** 667 ************************************************************************ 668 * @brief Gets an access unit (AU) from the stream handler source. 669 * @note An AU is the smallest possible amount of data to be decoded by a decoder (audio/video). 670 * 671 * @param context: (IN) Context of the reader 672 * @param pStreamHandler (IN) The stream handler of the stream to make jump 673 * @param pAccessUnit (IN/OUT) Pointer to an access unit to fill with read data 674 * (the au structure is allocated by the user, and must be 675 * initialized by calling M4READER_fillAuStruct_fct after 676 * creation) 677 * @return M4NO_ERROR there is no error 678 * @return M4ERR_BAD_CONTEXT provided context is not a valid one 679 * @return M4ERR_PARAMETER at least one parameter is not properly set 680 * @returns M4ERR_ALLOC memory allocation failed 681 * @returns M4ERR_BAD_STREAM_ID at least one of the stream Id. does not exist. 682 * @returns M4WAR_NO_DATA_YET there is no enough data on the stream for new 683 * access unit 684 * @returns M4WAR_NO_MORE_AU there are no more access unit in the stream 685 * (end of stream) 686 ************************************************************************ 687 */ 688 typedef M4OSA_ERR (M4READER_getNextAu_fct)(M4OSA_Context context, 689 M4_StreamHandler *pStreamHandler, 690 M4_AccessUnit *pAccessUnit); 691 692 693 /** 694 ************************************************************************ 695 * structure M4READER_DataInterface 696 * @brief This structure defines the generic media reader DATA interface 697 * @note This structure stores the pointers to functions concerning 698 * data access for one reader type.(those functions are typically called from 699 * a decoder) The reader type is one of the M4READER_MediaType 700 ************************************************************************ 701 */ 702 typedef struct _M4READER_DataInterface 703 { 704 M4READER_getNextAu_fct* m_pFctGetNextAu; 705 706 /** 707 stores the context created by the M4READER_create_fct() function 708 so it is accessible without decoder 709 */ 710 M4OSA_Context m_readerContext; 711 /*****************************************/ 712 } M4READER_DataInterface; 713 /*****************************************/ 714 715 716 #endif /*__M4READER_COMMON_H__*/ 717 718