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*/ 52typedef 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*/ 89typedef 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*/ 106typedef 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*/ 271typedef 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*/ 296typedef 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*/ 337typedef struct 338{ 339 M4OSA_UInt8* m_pData; 340 M4OSA_UInt32 m_uiBufferSize; 341} M4READER_Buffer; 342 343typedef 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/* 351typedef 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*/ 369typedef 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 387typedef 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 398typedef 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*/ 426typedef 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*/ 437typedef 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*/ 451typedef 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*/ 464typedef 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*/ 483typedef 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*/ 503typedef 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*/ 517typedef 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*/ 529typedef 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*/ 551typedef 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*/ 573typedef 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*/ 592typedef 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*/ 610typedef 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*/ 628typedef 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*/ 642typedef 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*/ 688typedef 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*/ 702typedef 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