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 ****************************************************************************** 19 * @file M4VSS3GPP_InternalFunctions.h 20 * @brief This file contains all function prototypes not visible to the external world. 21 * @note 22 ****************************************************************************** 23 */ 24 25 26 #ifndef __M4VSS3GPP_INTERNALFUNCTIONS_H__ 27 #define __M4VSS3GPP_INTERNALFUNCTIONS_H__ 28 29 #include "NXPSW_CompilerSwitches.h" 30 /** 31 * VSS public API and types */ 32 #include "M4VSS3GPP_API.h" 33 34 /** 35 * VSS private types */ 36 #include "M4VSS3GPP_InternalTypes.h" 37 38 39 #include "M4READER_Common.h" /**< for M4_AccessUnit definition */ 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 /* All errors are fatal in the VSS */ 46 #define M4ERR_CHECK_RETURN(err) if(M4NO_ERROR!=err) return err; 47 48 /** 49 ****************************************************************************** 50 * M4OSA_ERR M4VSS3GPP_intEditStepVideo() 51 * @brief One step of video processing 52 * @param pC (IN/OUT) Internal edit context 53 ****************************************************************************** 54 */ 55 M4OSA_ERR M4VSS3GPP_intEditStepVideo(M4VSS3GPP_InternalEditContext *pC); 56 57 /** 58 ****************************************************************************** 59 * M4OSA_ERR M4VSS3GPP_intEditStepAudio() 60 * @brief One step of audio processing 61 * @param pC (IN/OUT) Internal edit context 62 ****************************************************************************** 63 */ 64 M4OSA_ERR M4VSS3GPP_intEditStepAudio(M4VSS3GPP_InternalEditContext *pC); 65 66 /** 67 ****************************************************************************** 68 * M4OSA_ERR M4VSS3GPP_intEditStepMP3() 69 * @brief One step of audio processing for the MP3 clip 70 * @param pC (IN/OUT) Internal edit context 71 ****************************************************************************** 72 */ 73 M4OSA_ERR M4VSS3GPP_intEditStepMP3(M4VSS3GPP_InternalEditContext *pC); 74 75 /** 76 ****************************************************************************** 77 * M4OSA_ERR M4VSS3GPP_intOpenClip() 78 * @brief Open next clip 79 * @param pC (IN/OUT) Internal edit context 80 ****************************************************************************** 81 */ 82 M4OSA_ERR M4VSS3GPP_intOpenClip(M4VSS3GPP_InternalEditContext *pC, M4VSS3GPP_ClipContext **hClip, 83 M4VSS3GPP_ClipSettings *pClipSettings); 84 85 /** 86 ****************************************************************************** 87 * M4OSA_ERR M4VSS3GPP_intDestroyVideoEncoder() 88 * @brief Destroy the video encoder 89 * @note 90 ****************************************************************************** 91 */ 92 M4OSA_ERR M4VSS3GPP_intDestroyVideoEncoder(M4VSS3GPP_InternalEditContext *pC); 93 94 /** 95 ****************************************************************************** 96 * M4OSA_ERR M4VSS3GPP_intCreateVideoEncoder() 97 * @brief Creates the video encoder 98 * @note 99 ****************************************************************************** 100 */ 101 M4OSA_ERR M4VSS3GPP_intCreateVideoEncoder(M4VSS3GPP_InternalEditContext *pC); 102 103 /** 104 ****************************************************************************** 105 * M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo() 106 * @brief Do what to do when the end of a clip video track is reached 107 * @note If there is audio on the current clip, process it, else switch to the next clip 108 * @param pC (IN/OUT) Internal edit context 109 ****************************************************************************** 110 */ 111 M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo(M4VSS3GPP_InternalEditContext *pC); 112 113 /** 114 ****************************************************************************** 115 * M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio() 116 * @brief Do what to do when the end of a clip audio track is reached 117 * @param pC (IN/OUT) Internal edit context 118 ****************************************************************************** 119 */ 120 M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio(M4VSS3GPP_InternalEditContext *pC); 121 122 /** 123 ****************************************************************************** 124 * M4OSA_ERR M4VSS3GPP_intCheckClipCompatibleWithVssEditing() 125 * @brief Check if the clip is compatible with VSS editing 126 * @note 127 * @param pClipCtxt (IN) internal clip context 128 * @param pClipProperties (OUT) Pointer to a valid ClipProperties structure. 129 * @return M4NO_ERROR: No error 130 ****************************************************************************** 131 */ 132 M4OSA_ERR M4VSS3GPP_intCheckClipCompatibleWithVssEditing(M4VIDEOEDITING_ClipProperties \ 133 *pClipProperties); 134 135 /** 136 ****************************************************************************** 137 * M4OSA_ERR M4VSS3GPP_intClipOpen() 138 * @brief Open a clip. Creates a clip context. 139 * @note 140 * @param hClipCtxt (OUT) Return the internal clip context 141 * @param pClipSettings (IN) Edit settings of this clip. The module will keep a 142 * reference to this pointer 143 * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions 144 * @param bSkipAudioTrack (IN) If true, do not open the audio 145 * @param bFastOpenMode (IN) If true, use the fast mode of the 3gpp reader 146 * (only the first AU is read) 147 * @return M4NO_ERROR: No error 148 * @return M4ERR_ALLOC: There is no more available memory 149 ****************************************************************************** 150 */ 151 M4OSA_ERR M4VSS3GPP_intClipInit ( 152 M4VSS3GPP_ClipContext **hClipCtxt, 153 M4OSA_FileReadPointer *pFileReadPtrFct 154 ); 155 156 M4OSA_ERR M4VSS3GPP_intClipOpen ( 157 M4VSS3GPP_ClipContext *pClipCtxt, 158 M4VSS3GPP_ClipSettings *pClipSettings, 159 M4OSA_Bool bSkipAudioTrack, 160 M4OSA_Bool bFastOpenMode, 161 M4OSA_Bool bAvoidOpeningVideoDec 162 ); 163 164 165 /** 166 ****************************************************************************** 167 * M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack() 168 * @brief Delete the audio track. Clip will be like if it had no audio track 169 * @note 170 * @param pClipCtxt (IN) Internal clip context 171 ****************************************************************************** 172 */ 173 M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack(M4VSS3GPP_ClipContext *pClipCtxt); 174 175 /** 176 ****************************************************************************** 177 * M4OSA_ERR M4VSS3GPP_intClipDecodeVideoUpToCurrentTime() 178 * @brief Jump to the previous RAP and decode up to the current video time 179 * @param pClipCtxt (IN) Internal clip context 180 * @param iCts (IN) Target CTS 181 ****************************************************************************** 182 */ 183 M4OSA_ERR M4VSS3GPP_intClipDecodeVideoUpToCts(M4VSS3GPP_ClipContext* pClipCtxt, M4OSA_Int32 iCts); 184 185 /** 186 ****************************************************************************** 187 * M4OSA_ERR M4VSS3GPP_intClipReadNextAudioFrame() 188 * @brief Read one AU frame in the clip 189 * @note 190 * @param pClipCtxt (IN) Internal clip context 191 * @return M4NO_ERROR: No error 192 ****************************************************************************** 193 */ 194 M4OSA_ERR M4VSS3GPP_intClipReadNextAudioFrame(M4VSS3GPP_ClipContext *pClipCtxt); 195 196 /** 197 ****************************************************************************** 198 * M4OSA_ERR M4VSS3GPP_intClipDecodeCurrentAudioFrame() 199 * @brief Decode the current AUDIO frame. 200 * @note 201 * @param pClipCtxt (IN) internal clip context 202 * @return M4NO_ERROR: No error 203 ****************************************************************************** 204 */ 205 M4OSA_ERR M4VSS3GPP_intClipDecodeCurrentAudioFrame(M4VSS3GPP_ClipContext *pClipCtxt); 206 207 /** 208 ****************************************************************************** 209 * M4OSA_ERR M4VSS3GPP_intClipJumpAudioAt() 210 * @brief Jump in the audio track of the clip. 211 * @note 212 * @param pClipCtxt (IN) internal clip context 213 * @param pJumpCts (IN/OUT) in:target CTS, out: reached CTS 214 * @return M4NO_ERROR: No error 215 ****************************************************************************** 216 */ 217 M4OSA_ERR M4VSS3GPP_intClipJumpAudioAt(M4VSS3GPP_ClipContext *pClipCtxt, M4OSA_Int32 *pJumpCts); 218 219 /** 220 ****************************************************************************** 221 * M4OSA_ERR M4VSS3GPP_intClipClose() 222 * @brief Close a clip. Destroy the context. 223 * @note 224 * @param pClipCtxt (IN) Internal clip context 225 * @return M4NO_ERROR: No error 226 ****************************************************************************** 227 */ 228 M4OSA_ERR M4VSS3GPP_intClipClose(M4VSS3GPP_ClipContext *pClipCtxt); 229 230 M4OSA_ERR M4VSS3GPP_intClipCleanUp(M4VSS3GPP_ClipContext *pClipCtxt); 231 232 /** 233 ****************************************************************************** 234 * M4OSA_ERR M4VSS3GPP_intEditJumpMP3() 235 * @brief One step of jumping processing for the MP3 clip. 236 * @note On one step, the jump of several AU is done 237 * @param pC (IN/OUT) Internal edit context 238 ****************************************************************************** 239 */ 240 M4OSA_ERR M4VSS3GPP_intEditJumpMP3(M4VSS3GPP_InternalEditContext *pC); 241 242 /** 243 ****************************************************************************** 244 * M4OSA_ERR M4VSS3GPP_registerWriter() 245 * @brief This function will register a specific file format writer. 246 * @note According to the Mediatype, this function will store in the internal context 247 * the writer context. 248 * @param pContext: (IN) Execution context. 249 * @return M4NO_ERROR: there is no error 250 * @return M4ERR_PARAMETER pContext,pWtrGlobalInterface or pWtrDataInterface is 251 * M4OSA_NULL (debug only), or invalid MediaType 252 ****************************************************************************** 253 */ 254 M4OSA_ERR M4VSS3GPP_registerWriter(M4VSS3GPP_MediaAndCodecCtxt *pC, 255 M4WRITER_OutputFileType MediaType, 256 M4WRITER_GlobalInterface* pWtrGlobalInterface, 257 M4WRITER_DataInterface* pWtrDataInterface); 258 259 /** 260 ****************************************************************************** 261 * M4OSA_ERR M4VSS3GPP_registerEncoder() 262 * @brief This function will register a specific video encoder. 263 * @note According to the Mediatype, this function will store in the internal context 264 * the encoder context. 265 * @param pContext: (IN) Execution context. 266 * @return M4NO_ERROR: there is no error 267 * @return M4ERR_PARAMETER pContext or pEncGlobalInterface is M4OSA_NULL (debug only), 268 * or invalid MediaType 269 ****************************************************************************** 270 */ 271 M4OSA_ERR M4VSS3GPP_registerVideoEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 272 M4ENCODER_Format MediaType, 273 M4ENCODER_GlobalInterface *pEncGlobalInterface); 274 275 /** 276 ****************************************************************************** 277 * M4OSA_ERR M4VSS3GPP_registerAudioEncoder() 278 * @brief This function will register a specific audio encoder. 279 * @note According to the Mediatype, this function will store in the internal context 280 * the encoder context. 281 * @param pContext: (IN) Execution context. 282 * @param mediaType: (IN) The media type. 283 * @param pEncGlobalInterface: (OUT) the encoder interface functions. 284 * @return M4NO_ERROR: there is no error 285 * @return M4ERR_PARAMETER: pContext or pEncGlobalInterface is M4OSA_NULL (debug only) 286 ****************************************************************************** 287 */ 288 M4OSA_ERR M4VSS3GPP_registerAudioEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 289 M4ENCODER_AudioFormat MediaType, 290 M4ENCODER_AudioGlobalInterface *pEncGlobalInterface); 291 292 /** 293 ************************************************************************ 294 * M4OSA_ERR M4VSS3GPP_registerReader() 295 * @brief Register reader. 296 * @param pContext (IN/OUT) VSS context. 297 * @return M4NO_ERROR: No error 298 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 299 ************************************************************************ 300 */ 301 M4OSA_ERR M4VSS3GPP_registerReader(M4VSS3GPP_MediaAndCodecCtxt *pC, 302 M4READER_MediaType mediaType, 303 M4READER_GlobalInterface *pRdrGlobalInterface, 304 M4READER_DataInterface *pRdrDataInterface); 305 306 /** 307 ************************************************************************ 308 * M4OSA_ERR M4VSS3GPP_registerVideoDecoder() 309 * @brief Register video decoder 310 * @param pContext (IN/OUT) VSS context. 311 * @param decoderType (IN) Decoder type 312 * @param pDecoderInterface (IN) Decoder interface. 313 * @return M4NO_ERROR: No error 314 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only), or the decoder type 315 * is invalid 316 ************************************************************************ 317 */ 318 M4OSA_ERR M4VSS3GPP_registerVideoDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 319 M4DECODER_VideoType decoderType, 320 M4DECODER_VideoInterface *pDecoderInterface); 321 322 /** 323 ************************************************************************ 324 * M4OSA_ERR M4VSS3GPP_registerAudioDecoder() 325 * @brief Register audio decoder 326 * @note This function is used internaly by the VSS to register audio decoders, 327 * @param context (IN/OUT) VSS context. 328 * @param decoderType (IN) Audio decoder type 329 * @param pDecoderInterface (IN) Audio decoder interface. 330 * @return M4NO_ERROR: No error 331 * @return M4ERR_PARAMETER: A parameter is null, or the decoder type is invalid 332 * (in DEBUG only) 333 ************************************************************************ 334 */ 335 M4OSA_ERR M4VSS3GPP_registerAudioDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 336 M4AD_Type decoderType, 337 M4AD_Interface *pDecoderInterface); 338 339 /** 340 ************************************************************************ 341 * M4OSA_ERR M4VSS3GPP_unRegisterAllWriters() 342 * @brief Unregister writer 343 * @param pContext (IN/OUT) VSS context. 344 * @return M4NO_ERROR: No error 345 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 346 ************************************************************************ 347 */ 348 M4OSA_ERR M4VSS3GPP_unRegisterAllWriters(M4VSS3GPP_MediaAndCodecCtxt *pC); 349 350 /** 351 ************************************************************************ 352 * M4OSA_ERR M4VSS3GPP_unRegisterAllEncoders() 353 * @brief Unregister the encoders 354 * @param pContext (IN/OUT) VSS context. 355 * @return M4NO_ERROR: No error 356 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 357 ************************************************************************ 358 */ 359 M4OSA_ERR M4VSS3GPP_unRegisterAllEncoders(M4VSS3GPP_MediaAndCodecCtxt *pC); 360 361 /** 362 ************************************************************************ 363 * M4OSA_ERR M4VSS3GPP_unRegisterAllReaders() 364 * @brief Unregister reader 365 * @param pContext (IN/OUT) VSS context. 366 * @return M4NO_ERROR: No error 367 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 368 ************************************************************************ 369 */ 370 M4OSA_ERR M4VSS3GPP_unRegisterAllReaders(M4VSS3GPP_MediaAndCodecCtxt *pC); 371 372 /** 373 ************************************************************************ 374 * M4OSA_ERR M4VSS3GPP_unRegisterAllDecoders() 375 * @brief Unregister the decoders 376 * @param pContext (IN/OUT) VSS context. 377 * @return M4NO_ERROR: No error 378 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 379 ************************************************************************ 380 */ 381 M4OSA_ERR M4VSS3GPP_unRegisterAllDecoders(M4VSS3GPP_MediaAndCodecCtxt *pC); 382 383 /** 384 ************************************************************************ 385 * M4OSA_ERR M4VSS3GPP_setCurrentWriter() 386 * @brief Set current writer 387 * @param pContext (IN/OUT) VSS context. 388 * @param mediaType (IN) Media type. 389 * @return M4NO_ERROR: No error 390 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 391 * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 392 ************************************************************************ 393 */ 394 M4OSA_ERR M4VSS3GPP_setCurrentWriter(M4VSS3GPP_MediaAndCodecCtxt *pC, 395 M4VIDEOEDITING_FileType mediaType); 396 397 /** 398 ************************************************************************ 399 * M4OSA_ERR M4VSS3GPP_setCurrentVideoEncoder() 400 * @brief Set a video encoder 401 * @param pContext (IN/OUT) VSS context. 402 * @param MediaType (IN) Encoder type 403 * @return M4NO_ERROR: No error 404 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 405 * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 406 ************************************************************************ 407 */ 408 M4OSA_ERR M4VSS3GPP_setCurrentVideoEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 409 M4SYS_StreamType mediaType); 410 411 /** 412 ************************************************************************ 413 * M4OSA_ERR M4VSS3GPP_setCurrentAudioEncoder() 414 * @brief Set an audio encoder 415 * @param context (IN/OUT) VSS context. 416 * @param MediaType (IN) Encoder type 417 * @return M4NO_ERROR: No error 418 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 419 ************************************************************************ 420 */ 421 M4OSA_ERR M4VSS3GPP_setCurrentAudioEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 422 M4SYS_StreamType mediaType); 423 424 /** 425 ************************************************************************ 426 * M4OSA_ERR M4VSS3GPP_setCurrentReader() 427 * @brief Set current reader 428 * @param pContext (IN/OUT) VSS context. 429 * @param mediaType (IN) Media type. 430 * @return M4NO_ERROR: No error 431 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 432 * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 433 ************************************************************************ 434 */ 435 M4OSA_ERR M4VSS3GPP_setCurrentReader(M4VSS3GPP_MediaAndCodecCtxt *pC, 436 M4VIDEOEDITING_FileType mediaType); 437 438 /** 439 ************************************************************************ 440 * M4OSA_ERR M4VSS3GPP_setCurrentVideoDecoder() 441 * @brief Set a video decoder 442 * @param pContext (IN/OUT) VSS context. 443 * @param decoderType (IN) Decoder type 444 * @return M4NO_ERROR: No error 445 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 446 * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 447 ************************************************************************ 448 */ 449 M4OSA_ERR M4VSS3GPP_setCurrentVideoDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 450 M4_StreamType mediaType); 451 452 /** 453 ************************************************************************ 454 * M4OSA_ERR M4VSS3GPP_setCurrentAudioDecoder() 455 * @brief Set an audio decoder 456 * @param context (IN/OUT) VSS context. 457 * @param decoderType (IN) Decoder type 458 * @return M4NO_ERROR: No error 459 * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 460 ************************************************************************ 461 */ 462 M4OSA_ERR M4VSS3GPP_setCurrentAudioDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC, 463 M4_StreamType mediaType); 464 465 /** 466 ************************************************************************ 467 * M4OSA_ERR M4VSS3GPP_clearInterfaceTables() 468 * @brief Clear encoders, decoders, reader and writers interfaces tables 469 * @param pContext (IN/OUT) VSS context. 470 * @return M4NO_ERROR: No error 471 * @return M4ERR_PARAMETER: The context is null 472 ************************************************************************ 473 */ 474 M4OSA_ERR M4VSS3GPP_clearInterfaceTables(M4VSS3GPP_MediaAndCodecCtxt *pC); 475 476 /** 477 ****************************************************************************** 478 * M4OSA_ERR M4VSS3GPP_SubscribeMediaAndCodec() 479 * @brief This function registers the reader, decoders, writers and encoders 480 * in the VSS. 481 * @note 482 * @param pContext: (IN) Execution context. 483 * @return M4NO_ERROR: there is no error 484 * @return M4ERR_PARAMETER pContext is NULL 485 ****************************************************************************** 486 */ 487 M4OSA_ERR M4VSS3GPP_subscribeMediaAndCodec(M4VSS3GPP_MediaAndCodecCtxt *pContext); 488 489 /** 490 ****************************************************************************** 491 * M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_AMRNB() 492 * @brief Return the length, in bytes, of the AMR Narrow-Band frame contained in the given buffer 493 * @note 494 * @param pAudioFrame (IN) AMRNB frame 495 * @return M4NO_ERROR: No error 496 ****************************************************************************** 497 */ 498 M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_AMRNB(M4OSA_MemAddr8 pAudioFrame); 499 500 /** 501 ****************************************************************************** 502 * M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_EVRC() 503 * @brief Return the length, in bytes, of the EVRC frame contained in the given buffer 504 * @note 505 * 0 1 2 3 506 * +-+-+-+-+ 507 * |fr type| RFC 3558 508 * +-+-+-+-+ 509 * 510 * Frame Type: 4 bits 511 * The frame type indicates the type of the corresponding codec data 512 * frame in the RTP packet. 513 * 514 * For EVRC and SMV codecs, the frame type values and size of the 515 * associated codec data frame are described in the table below: 516 * 517 * Value Rate Total codec data frame size (in octets) 518 * --------------------------------------------------------- 519 * 0 Blank 0 (0 bit) 520 * 1 1/8 2 (16 bits) 521 * 2 1/4 5 (40 bits; not valid for EVRC) 522 * 3 1/2 10 (80 bits) 523 * 4 1 22 (171 bits; 5 padded at end with zeros) 524 * 5 Erasure 0 (SHOULD NOT be transmitted by sender) 525 * 526 * @param pCpAudioFrame (IN) EVRC frame 527 * @return M4NO_ERROR: No error 528 ****************************************************************************** 529 */ 530 M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_EVRC(M4OSA_MemAddr8 pAudioFrame); 531 532 /** 533 ****************************************************************************** 534 * M4OSA_ERR M4VSS3GPP_intBuildAnalysis() 535 * @brief Get video and audio properties from the clip streams 536 * @note This function must return fatal errors only (errors that should not happen in the 537 * final integrated product). 538 * @param pClipCtxt (IN) internal clip context 539 * @param pClipProperties (OUT) Pointer to a valid ClipProperties structure. 540 * @return M4NO_ERROR: No error 541 ****************************************************************************** 542 */ 543 M4OSA_ERR M4VSS3GPP_intBuildAnalysis(M4VSS3GPP_ClipContext *pClipCtxt, 544 M4VIDEOEDITING_ClipProperties *pClipProperties); 545 546 /** 547 ****************************************************************************** 548 * M4OSA_ERR M4VSS3GPP_intCreateAudioEncoder() 549 * @brief Reset the audio encoder (Create it if needed) 550 * @note 551 ****************************************************************************** 552 */ 553 M4OSA_ERR M4VSS3GPP_intCreateAudioEncoder(M4VSS3GPP_EncodeWriteContext *pC_ewc, 554 M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI, 555 M4OSA_UInt32 uiAudioBitrate); 556 557 /** 558 ****************************************************************************** 559 * M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile() 560 * @brief Creates and prepare the output MP3 file 561 * @note Creates the writer, Creates the output file, Adds the streams, Readies the 562 * writing process 563 * @param pC (IN/OUT) Internal edit context 564 ****************************************************************************** 565 */ 566 M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile(M4VSS3GPP_EncodeWriteContext *pC_ewc, 567 M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI, 568 M4OSA_FileWriterPointer *pOsaFileWritPtr, 569 M4OSA_Void* pOutputFile, 570 M4OSA_FileReadPointer *pOsaFileReadPtr, 571 M4OSA_Void* pTempFile, 572 M4OSA_UInt32 maxOutputFileSize); 573 574 /** 575 ****************************************************************************** 576 * M4OSA_ERR M4VSS3GPP_intAudioMixingCompatibility() 577 * @brief This function allows checking if two clips are compatible with each other for 578 * VSS 3GPP audio mixing feature. 579 * @note 580 * @param pC (IN) Context of the audio mixer 581 * @param pInputClipProperties (IN) Clip analysis of the first clip 582 * @param pAddedClipProperties (IN) Clip analysis of the second clip 583 * @return M4NO_ERROR: No error 584 * @return M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION 585 * @return M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP 586 * @return M4NO_ERROR 587 ****************************************************************************** 588 */ 589 M4OSA_ERR M4VSS3GPP_intAudioMixingCompatibility(M4VSS3GPP_InternalAudioMixingContext *pC, 590 M4VIDEOEDITING_ClipProperties \ 591 *pInputClipProperties, 592 M4VIDEOEDITING_ClipProperties \ 593 *pAddedClipProperties); 594 595 /** 596 ****************************************************************************** 597 * M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack() 598 * @brief Delete the audio track. Clip will be like if it had no audio track 599 * @note 600 * @param pClipCtxt (IN) Internal clip context 601 ****************************************************************************** 602 */ 603 M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack(M4VSS3GPP_ClipContext *pClipCtxt); 604 605 /****************************************************************************** 606 * M4OSA_ERR M4VSS3GPP_intStartAU() 607 * @brief StartAU writer-like interface used for the VSS 3GPP only 608 * @note 609 * @param pContext: (IN) It is the VSS 3GPP context in our case 610 * @param streamID: (IN) Id of the stream to which the Access Unit is related. 611 * @param pAU: (IN/OUT) Access Unit to be prepared. 612 * @return M4NO_ERROR: there is no error 613 ****************************************************************************** 614 */ 615 M4OSA_ERR M4VSS3GPP_intStartAU(M4WRITER_Context pContext, M4SYS_StreamID streamID, 616 M4SYS_AccessUnit* pAU); 617 618 /****************************************************************************** 619 * M4OSA_ERR M4VSS3GPP_intProcessAU() 620 * @brief ProcessAU writer-like interface used for the VSS 3GPP only 621 * @note 622 * @param pContext: (IN) It is the VSS 3GPP context in our case 623 * @param streamID: (IN) Id of the stream to which the Access Unit is related. 624 * @param pAU: (IN/OUT) Access Unit to be written 625 * @return M4NO_ERROR: there is no error 626 ****************************************************************************** 627 */ 628 M4OSA_ERR M4VSS3GPP_intProcessAU(M4WRITER_Context pContext, M4SYS_StreamID streamID, 629 M4SYS_AccessUnit* pAU); 630 631 /** 632 ****************************************************************************** 633 * M4OSA_ERR M4VSS3GPP_intVPP() 634 * @brief We implement our own VideoPreProcessing function 635 * @note It is called by the video encoder 636 * @param pContext (IN) VPP context, which actually is the VSS 3GPP context in our case 637 * @param pPlaneIn (IN) 638 * @param pPlaneOut (IN/OUT) Pointer to an array of 3 planes that will contain the 639 * output YUV420 image 640 * @return M4NO_ERROR: No error 641 ****************************************************************************** 642 */ 643 M4OSA_ERR M4VSS3GPP_intVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, 644 M4VIFI_ImagePlane* pPlaneOut); 645 646 #ifdef __cplusplus 647 } 648 #endif 649 650 #endif /* __M4VSS3GPP_INTERNALFUNCTIONS_H__ */ 651 652