Home | History | Annotate | Download | only in inc
      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