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    M4MCS_API.h
     20  * @brief   Media Conversion Service public API.
     21  * @note    MCS allows transcoding a 3gp/mp4 file into a new 3gp/mp4 file changing the
     22  *          video and audio encoding settings.
     23  *          It is a straightforward and fully synchronous API.
     24  ******************************************************************************
     25  */
     26 
     27 #ifndef __M4MCS_API_H__
     28 #define __M4MCS_API_H__
     29 
     30 /**
     31  *    OSAL basic types and errors */
     32 #include "M4OSA_Types.h"
     33 #include "M4OSA_Error.h"
     34 
     35 /**
     36  *    OSAL types for file access */
     37 #include "M4OSA_FileReader.h"
     38 #include "M4OSA_FileWriter.h"
     39 
     40 /**
     41  *    Definition of M4_VersionInfo */
     42 #include "M4TOOL_VersionInfo.h"
     43 
     44 /**
     45  * Common definitions of video editing components */
     46 #include "M4_VideoEditingCommon.h"
     47 
     48 /**
     49  * To enable external audio codecs registering*/
     50 #include "M4AD_Common.h"
     51 #include "M4ENCODER_AudioCommon.h"
     52 
     53 #ifdef __cplusplus
     54 extern "C" {
     55 #endif
     56 
     57 /**
     58  *    Public type of the MCS context */
     59 typedef M4OSA_Void* M4MCS_Context;
     60 
     61 
     62 /**
     63  ******************************************************************************
     64  * enum        M4MCS_MediaRendering
     65  * @brief    This enum defines different media rendering
     66  ******************************************************************************
     67  */
     68 typedef enum
     69 {
     70     M4MCS_kResizing = 0,    /**< The media is resized, the aspect ratio can be
     71                               different from the original one.
     72                               All of the media is rendered */
     73     M4MCS_kCropping,        /**< The media is cropped, the aspect ratio is the
     74                               same as the original one.
     75                               The media is not rendered entirely */
     76     M4MCS_kBlackBorders     /**< Black borders are rendered in order to keep the
     77                               original aspect ratio. All the media is rendered */
     78 } M4MCS_MediaRendering;
     79 
     80 
     81 /**
     82  ******************************************************************************
     83  * struct   M4MCS_ExternalProgress
     84  * @brief   This structure contains information provided to the external Effect functions
     85  * @note    The uiProgress value should be enough for most cases
     86  ******************************************************************************
     87  */
     88 typedef struct
     89 {
     90     M4OSA_UInt32    uiProgress;     /**< Progress of the Effect from 0 to 1000 (one thousand) */
     91     M4OSA_UInt32    uiClipTime;     /**< Current time, in milliseconds,
     92                                           in the current clip time-line */
     93     M4OSA_UInt32    uiOutputTime;   /**< Current time, in milliseconds,
     94                                           in the output clip time-line */
     95 
     96 } M4MCS_ExternalProgress;
     97 
     98 
     99 /**
    100  ******************************************************************************
    101  * enum     M4MCS_AudioEffectType
    102  * @brief   This enumeration defines the audio effect types of the MCS
    103  ******************************************************************************
    104  */
    105 typedef enum
    106 {
    107     M4MCS_kAudioEffectType_None    = 0,
    108     M4MCS_kAudioEffectType_FadeIn  = 8, /**< Intended for begin effect */
    109     M4MCS_kAudioEffectType_FadeOut = 16, /**< Intended for end effect */
    110     M4MCS_kAudioEffectType_External = 256
    111 
    112 } M4MCS_AudioEffectType;
    113 
    114 
    115 /**
    116  ******************************************************************************
    117  * prototype    M4MCS_editAudioEffectFct
    118  * @brief       Audio effect functions implemented by the integrator
    119  *              must match this prototype.
    120  * @note        The function is provided with the original PCM data buffer and its size.
    121  *              Audio effect have to be applied on it.
    122  *              The progress of the effect is given, on a scale from 0 to 1000.
    123  *              When the effect function is called, all the buffers are valid and
    124  *              owned by the MCS.
    125  *
    126  * @param   pFunctionContext    (IN) The function context, previously set by the integrator
    127  * @param   pPCMdata            (IN/OUT) valid PCM data buffer
    128  * @param   uiPCMsize           (IN/OUT) PCM data buffer corresponding size
    129  * @param   pProgress           (IN) Set of information about the audio effect progress.
    130  *
    131  * @return  M4NO_ERROR:         No error
    132  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    133  ******************************************************************************
    134  */
    135 typedef M4OSA_ERR (*M4MCS_editAudioEffectFct)
    136 (
    137     M4OSA_Void *pFunctionContext,
    138     M4OSA_Int16 *pPCMdata,
    139     M4OSA_UInt32 uiPCMsize,
    140     M4MCS_ExternalProgress *pProgress
    141 );
    142 
    143 
    144 /**
    145  ******************************************************************************
    146  * struct   M4MCS_EffectSettings
    147  * @brief   This structure defines an audio effect for the edition.
    148  ******************************************************************************
    149  */
    150 typedef struct
    151 {
    152     M4OSA_UInt32                 uiStartTime;              /**< In ms */
    153     M4OSA_UInt32                 uiDuration;               /**< In ms */
    154     M4MCS_editAudioEffectFct     ExtAudioEffectFct;        /**< External effect function */
    155     M4OSA_Void                   *pExtAudioEffectFctCtxt;  /**< Context given to the external
    156                                                                 effect function */
    157     M4MCS_AudioEffectType        AudioEffectType;         /**< None, FadeIn, FadeOut */
    158 
    159 } M4MCS_EffectSettings;
    160 
    161 
    162 /**
    163  ******************************************************************************
    164  * struct    M4MCS_OutputParams
    165  * @brief    MCS Output parameters
    166  * @note     Following parameters are used for still picture inputs :
    167  *             - OutputFileType (must be set to M4VIDEOEDITING_kFileType_JPG)
    168  *             - bDiscardExif must be set to M4OSA_TRUE or M4OSA_FALSE
    169  *             - bAdjustOrientation must be set to M4OSA_TRUE or M4OSA_FALSE
    170  *             - (MediaRendering is not handled : output image resolution is always
    171                  set according to BestFit criteria)
    172  *            bDiscardExif and bAdjustOrientation are still picture only parameters
    173  ******************************************************************************
    174  */
    175 typedef struct
    176 {
    177     /**< Format of the output file */
    178     M4VIDEOEDITING_FileType                 OutputFileType;
    179     /**< Output video compression format, see enum */
    180     M4VIDEOEDITING_VideoFormat              OutputVideoFormat;
    181     /**< Output frame size : QQVGA, QCIF or SQCIF */
    182     M4VIDEOEDITING_VideoFrameSize           OutputVideoFrameSize;
    183     /**< Targeted Output framerate, see enum */
    184     M4VIDEOEDITING_VideoFramerate           OutputVideoFrameRate;
    185     /**< Format of the audio in the stream */
    186     M4VIDEOEDITING_AudioFormat              OutputAudioFormat;
    187     /**< Sampling frequency of the audio in the stream */
    188     M4VIDEOEDITING_AudioSamplingFrequency   OutputAudioSamplingFrequency;
    189     /**< Set to M4OSA_TRUE if the output audio is mono */
    190     M4OSA_Bool                              bAudioMono;
    191     /**< Output PCM file if not NULL */
    192     M4OSA_Char                              *pOutputPCMfile;
    193     /**< To crop, resize, or render black borders*/
    194     M4MCS_MediaRendering                    MediaRendering;
    195     /**< List of effects */
    196     M4MCS_EffectSettings                    *pEffects;
    197     /**< Number of effects in the above list */
    198     M4OSA_UInt8                             nbEffects;
    199 
    200     /*--- STILL PICTURE ---*/
    201     /**< TRUE: Even if the input file contains an EXIF section,
    202     the output file won't contain any EXIF section.*/
    203     M4OSA_Bool                              bDiscardExif ;
    204 
    205     /**< =TRUE : picture must be rotated if Exif tags hold a rotation info
    206     (and rotation info is set to 0)*/
    207     M4OSA_Bool                              bAdjustOrientation ;
    208     /*--- STILL PICTURE ---*/
    209     M4OSA_Int32 outputVideoProfile;
    210     M4OSA_Int32 outputVideoLevel;
    211 } M4MCS_OutputParams;
    212 
    213 /*--- STILL PICTURE ---*/
    214 /**
    215  ******************************************************************************
    216  * enum      M4MCS_SPOutputResolution
    217  * @brief    Still picture specific : MCS output targeted file resolution
    218  ******************************************************************************
    219  */
    220 typedef enum
    221 {
    222     M4MCS_kResSameAsInput       = 0x00, /*width x height*/
    223     M4MCS_kResQVGA              = 0x01, /*320x240*/
    224     M4MCS_kResVGA               = 0x02, /*640x480*/
    225     M4MCS_kResWQVGA             = 0x03, /*400x240*/
    226     M4MCS_kResWVGA              = 0x04, /*800x480*/
    227     M4MCS_kResXGA               = 0x05, /*1024x768*/
    228     M4MCS_kResCustom            = 0xFF  /*Size is set via StillPictureCustomWidth/Height*/
    229 } M4MCS_SPOutputResolution ;
    230 
    231 
    232 /**
    233  ******************************************************************************
    234  * enum      M4MCS_SPStrategy
    235  * @brief    Still picture specific : MCS strategy to configure the encoding parameters
    236  ******************************************************************************
    237  */
    238 typedef enum
    239 {
    240     M4MCS_kFileSizeOnlyFixed            = 0x00, /*StillPictureResolution and
    241                                                  QualityFactor are ignored*/
    242     M4MCS_kFileSizeAndResFixed          = 0x01, /*QualityFactor is ignored*/
    243     M4MCS_kQualityAndResFixed           = 0x02  /*OutputFileSize is ignored*/
    244 } M4MCS_SPStrategy ;
    245 
    246 
    247 /**
    248  ******************************************************************************
    249  * enum      M4MCS_SPCrop
    250  * @brief    Still picture specific : indicate whether cropping should be done
    251                                      before changing the resolution
    252  ******************************************************************************
    253  */
    254 typedef enum
    255 {
    256     M4MCS_kNoCrop                = 0x00, /*No Cropping is performed*/
    257     M4MCS_kCropBeforeResize      = 0x01  /*Input image is cropped (before changing resolution)*/
    258 } M4MCS_SPCrop ;
    259 
    260 
    261 /**
    262  ******************************************************************************
    263  * struct    M4MCS_EncodingParams
    264  * @brief    MCS file size, bitrate and cut parameters
    265  * @note     Following parameters are used for still picture inputs :
    266  *             - OutputFileSize
    267  *             - StillPictureResolution
    268  *             - QualityFactor
    269  *             - StillPictureStrategy
    270  *             - StillPictureCustomWidth/Height (if StillPictureResolution==M4MCS_kResCustom)
    271  *            Still picture only parameters : StillPictureResolution, QualityFactor,
    272  *            StillPictureStrategy and StillPictureCustomWidth/Height
    273  ******************************************************************************
    274  */
    275 typedef struct
    276 {
    277     M4VIDEOEDITING_Bitrate    OutputVideoBitrate;     /**< Targeted video bitrate */
    278     M4VIDEOEDITING_Bitrate    OutputAudioBitrate;     /**< Targeted audio bitrate */
    279     M4OSA_UInt32              BeginCutTime;           /**< Beginning cut time in input file */
    280     M4OSA_UInt32              EndCutTime;             /**< End cut time in input file */
    281     M4OSA_UInt32              OutputFileSize;         /**< Expected resulting file size */
    282     M4OSA_UInt32              OutputVideoTimescale;   /**< Optional parameter used to fix a
    283                                                            timescale during transcoding */
    284 
    285     /*--- STILL PICTURE ---*/
    286     M4OSA_Int32               QualityFactor ;         /**< =-1 (undefined) or 0(lowest)..
    287                                                             50(best) : This parameter is the
    288                                                             quality indication for the JPEG output
    289                                                             file (if =-1 the MCS will set quality
    290                                                             automatically)*/
    291     M4MCS_SPStrategy            StillPictureStrategy ; /**< Defines which input parameters
    292                                                             will be taken into account by MCS*/
    293     M4MCS_SPOutputResolution    StillPictureResolution;/**< Desired output resolution for
    294                                                             a still picture file */
    295     /**< (only if Resolution==M4MCS_kResCustom) : Custom output image width */
    296     M4OSA_UInt32                StillPictureCustomWidth;
    297     /**< (only if Resolution==M4MCS_kResCustom) : Custom output image height */
    298     M4OSA_UInt32                StillPictureCustomHeight;
    299     /**< Indicate whether Crop should be performed */
    300     M4MCS_SPCrop                StillPictureCrop;
    301     /**< (only if cropping) X coordinate of topleft corner of the crop window */
    302     M4OSA_UInt32                StillPictureCrop_X;
    303     /**< (only if cropping) Y coordinate of topleft corner of the crop window */
    304     M4OSA_UInt32                StillPictureCrop_Y;
    305     /**< (only if cropping) Width of the crop window (in pixels) */
    306     M4OSA_UInt32                StillPictureCrop_W;
    307     /**< (only if cropping) Height of the crop window (in pixels) */
    308     M4OSA_UInt32                StillPictureCrop_H;
    309     /*--- STILL PICTURE ---*/
    310 } M4MCS_EncodingParams;
    311 
    312 /**
    313  ******************************************************************************
    314  * M4OSA_ERR M4MCS_getVersion(M4_VersionInfo* pVersionInfo);
    315  * @brief    Get the MCS version.
    316  * @note Can be called anytime. Do not need any context.
    317  * @param    pVersionInfo        (OUT) Pointer to a version info structure
    318  * @return   M4NO_ERROR:         No error
    319  * @return   M4ERR_PARAMETER:    pVersionInfo is M4OSA_NULL (If Debug Level >= 2)
    320  ******************************************************************************
    321  */
    322 M4OSA_ERR M4MCS_getVersion(M4_VersionInfo* pVersionInfo);
    323 
    324 /**
    325  ******************************************************************************
    326  * M4OSA_ERR M4MCS_init(M4MCS_Context* pContext, M4OSA_FileReadPointer* pFileReadPtrFct,
    327                         M4OSA_FileWriterPointer* pFileWritePtrFct);
    328  * @brief    Initializes the MCS (allocates an execution context).
    329  * @note
    330  * @param    pContext            (OUT) Pointer on the MCS context to allocate
    331  * @param    pFileReadPtrFct     (IN) Pointer to OSAL file reader functions
    332  * @param    pFileWritePtrFct    (IN) Pointer to OSAL file writer functions
    333  * @return   M4NO_ERROR:         No error
    334  * @return   M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (If Debug Level >= 2)
    335  * @return   M4ERR_ALLOC:        There is no more available memory
    336  ******************************************************************************
    337  */
    338 M4OSA_ERR M4MCS_init(M4MCS_Context* pContext, M4OSA_FileReadPointer* pFileReadPtrFct,
    339                       M4OSA_FileWriterPointer* pFileWritePtrFct);
    340 
    341 /**
    342  ******************************************************************************
    343  * M4OSA_ERR M4MCS_open(M4MCS_Context pContext, M4OSA_Void* pFileIn, M4OSA_Void* pFileOut,
    344                           M4OSA_UInt32 uiMaxMetadataSize);
    345  * @brief   Set the MCS input and output files.
    346  * @note    It opens the input file, but the output file is not created yet.
    347  *          In case of still picture, four InputFileType are possible
    348  *          (M4VIDEOEDITING_kFileType_JPG/BMP/GIF/PNG
    349  *          If one of them is set, the OutputFileType SHALL be set to M4VIDEOEDITING_kFileType_JPG
    350  * @param   pContext            (IN) MCS context
    351  * @param   pFileIn             (IN) Input file to transcode (The type of this parameter
    352  *                                    (URL, pipe...) depends on the OSAL implementation).
    353  * @param   mediaType           (IN) Container type (.3gp,.amr, ...) of input file.
    354  * @param   pFileOut            (IN) Output file to create  (The type of this parameter
    355  *                                    (URL, pipe...) depends on the OSAL implementation).
    356  * @param   pTempFile           (IN) Temporary file for the constant memory writer to store
    357  *                                    metadata ("moov.bin").
    358  * @return  M4NO_ERROR:         No error
    359  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    360  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    361  * @return  M4ERR_ALLOC:        There is no more available memory
    362  * @return  M4ERR_FILE_NOT_FOUND:   The input file has not been found
    363  * @return  M4MCS_ERR_INVALID_INPUT_FILE:   The input file is not a valid file, or is corrupted
    364  * @return  M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM:  The input file contains no
    365  *                                                               supported audio or video stream
    366  ******************************************************************************
    367  */
    368 M4OSA_ERR M4MCS_open(M4MCS_Context pContext, M4OSA_Void* pFileIn,
    369                      M4VIDEOEDITING_FileType InputFileType,
    370                      M4OSA_Void* pFileOut, M4OSA_Void* pTempFile);
    371 
    372 /**
    373  ******************************************************************************
    374  * M4OSA_ERR M4MCS_step(M4MCS_Context pContext, M4OSA_UInt8 *pProgress);
    375  * @brief   Perform one step of trancoding.
    376  * @note
    377  * @param   pContext            (IN) MCS context
    378  * @param   pProgress           (OUT) Progress percentage (0 to 100) of the transcoding
    379  * @note    pProgress must be a valid address.
    380  * @return  M4NO_ERROR:         No error
    381  * @return  M4ERR_PARAMETER:    One of the parameters is M4OSA_NULL (debug only)
    382  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    383  * @return  M4MCS_WAR_TRANSCODING_DONE: Transcoding is over, user should now call M4MCS_close()
    384  * @return  M4MCS_ERR_AUDIO_CONVERSION_FAILED: The audio conversion (AAC to AMR-NB, MP3) failed
    385  * @return  M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY: The input file contains an AAC audio track
    386  *                                                     with an invalid sampling frequency
    387  *                                                     (should never happen)
    388  * @return  M4MCS_WAR_PICTURE_AUTO_RESIZE: Picture will be automatically resized to fit
    389  *                                          into requirements
    390  ******************************************************************************
    391  */
    392 M4OSA_ERR M4MCS_step(M4MCS_Context pContext, M4OSA_UInt8 *pProgress);
    393 
    394 /**
    395  ******************************************************************************
    396  * M4OSA_ERR M4MCS_pause(M4MCS_Context pContext);
    397  * @brief   Pause the transcoding i.e. release the (external hardware) video decoder.
    398  * @note    This function is not needed if no hardware accelerators are used.
    399  *          In that case, pausing the MCS is simply achieved by temporarily suspending
    400  *          the M4MCS_step function calls.
    401  * @param   pContext            (IN) MCS context
    402  * @return  M4NO_ERROR:         No error
    403  * @return  M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
    404  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    405  ******************************************************************************
    406  */
    407 M4OSA_ERR M4MCS_pause(M4MCS_Context pContext);
    408 
    409 /**
    410  ******************************************************************************
    411  * M4OSA_ERR M4MCS_resume(M4MCS_Context pContext);
    412  * @brief   Resume the transcoding after a pause (see M4MCS_pause).
    413  * @note    This function is not needed if no hardware accelerators are used.
    414  *          In that case, resuming the MCS is simply achieved by calling
    415  *          the M4MCS_step function.
    416  * @param   pContext            (IN) MCS context
    417  * @return  M4NO_ERROR:         No error
    418  * @return  M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
    419  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    420  ******************************************************************************
    421  */
    422 M4OSA_ERR M4MCS_resume(M4MCS_Context pContext);
    423 
    424 /**
    425  ******************************************************************************
    426  * M4OSA_ERR M4MCS_close(M4MCS_Context pContext);
    427  * @brief    Finish the MCS transcoding.
    428  * @note The output 3GPP file is ready to be played after this call
    429  * @param    pContext            (IN) MCS context
    430  * @return   M4NO_ERROR:         No error
    431  * @return   M4ERR_PARAMETER:    pContext is M4OSA_NULL (If Debug Level >= 2)
    432  * @return   M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    433  ******************************************************************************
    434  */
    435 M4OSA_ERR M4MCS_close(M4MCS_Context pContext);
    436 
    437 /**
    438  ******************************************************************************
    439  * M4OSA_ERR M4MCS_cleanUp(M4MCS_Context pContext);
    440  * @brief    Free all resources used by the MCS.
    441  * @note The context is no more valid after this call
    442  * @param    pContext            (IN) MCS context
    443  * @return   M4NO_ERROR:         No error
    444  * @return   M4ERR_PARAMETER:    pContext is M4OSA_NULL (If Debug Level >= 2)
    445  * @return   M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    446  ******************************************************************************
    447  */
    448 M4OSA_ERR M4MCS_cleanUp(M4MCS_Context pContext);
    449 
    450 /**
    451  ******************************************************************************
    452  * M4OSA_ERR M4MCS_abort(M4MCS_Context pContext);
    453  * @brief    Finish the MCS transcoding and free all resources used by the MCS
    454  *          whatever the state is.
    455  * @note    The context is no more valid after this call
    456  * @param    pContext            (IN) MCS context
    457  * @return    M4NO_ERROR:            No error
    458  * @return    M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
    459  ******************************************************************************
    460  */
    461 M4OSA_ERR M4MCS_abort(M4MCS_Context pContext);
    462 
    463 /**
    464  ******************************************************************************
    465  * M4OSA_ERR M4MCS_getInputFileProperties(M4MCS_Context pContext,
    466  *                                          M4VIDEOEDITING_ClipProperties* pFileProperties);
    467  * @brief   Retrieves the properties of the audio and video streams from the input file.
    468  * @param   pContext            (IN) MCS context
    469  * @param   pProperties         (OUT) Pointer on an allocated M4VIDEOEDITING_ClipProperties
    470                                 structure which is filled with the input stream properties.
    471  * @note    The structure pProperties must be allocated and further de-allocated
    472             by the application. The function must be called in the opened state.
    473  * @return  M4NO_ERROR:         No error
    474  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
    475  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    476  ******************************************************************************
    477  */
    478 M4OSA_ERR M4MCS_getInputFileProperties(M4MCS_Context pContext,
    479                                         M4VIDEOEDITING_ClipProperties *pFileProperties);
    480 
    481 /**
    482  ******************************************************************************
    483  * M4OSA_ERR M4MCS_setOutputParams(M4MCS_Context pContext, M4MCS_OutputParams* pParams);
    484  * @brief   Set the MCS video output parameters.
    485  * @note    Must be called after M4MCS_open. Must be called before M4MCS_step.
    486  * @param   pContext            (IN) MCS context
    487  * @param   pParams             (IN/OUT) Transcoding parameters
    488  * @return  M4NO_ERROR:         No error
    489  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    490  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    491  * @return  M4MCS_ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263 : Output video frame size parameter is
    492  *                                                          incompatible with H263 encoding
    493  * @return  M4MCS_ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263 : Output video frame size parameter is
    494  *                                                          incompatible with H263 encoding
    495  * @return  M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT     : Undefined output video format parameter
    496  * @return  M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE : Undefined output video frame size
    497  * @return  M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE : Undefined output video frame rate
    498  * @return  M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT : Undefined output audio format parameter
    499  * @return  M4MCS_ERR_DURATION_IS_NULL : Specified output parameters define a null duration stream
    500  *                                        (no audio and video)
    501  ******************************************************************************
    502  */
    503 M4OSA_ERR M4MCS_setOutputParams(M4MCS_Context pContext, M4MCS_OutputParams* pParams);
    504 
    505 /**
    506  ******************************************************************************
    507  * M4OSA_ERR M4MCS_setEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates)
    508  * @brief   Set the values of the encoding parameters
    509  * @note    Must be called before M4MCS_checkParamsAndStart().
    510  * @param   pContext           (IN) MCS context
    511  * @param   pRates             (IN) Transcoding parameters
    512  * @return  M4NO_ERROR:         No error
    513  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    514  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    515  * @return  M4MCS_ERR_AUDIOBITRATE_TOO_HIGH: Audio bitrate too high (we limit to 96 kbps)
    516  * @return  M4MCS_ERR_AUDIOBITRATE_TOO_LOW: Audio bitrate is too low (16 kbps min for aac,
    517  *                                           12.2 for amr, 8 for mp3)
    518  * @return  M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: Begin cut and End cut are equals
    519  * @return  M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION: Begin cut time is larger than
    520  *                                                     the input clip duration
    521  * @return  M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT: End cut time is smaller than begin cut time
    522  * @return  M4MCS_ERR_MAXFILESIZE_TOO_SMALL: Not enough space to store whole output
    523  *                                            file at given bitrates
    524  * @return  M4MCS_ERR_VIDEOBITRATE_TOO_HIGH: Video bitrate too high (we limit to 800 kbps)
    525  * @return  M4MCS_ERR_VIDEOBITRATE_TOO_LOW: Video bitrate too low
    526  ******************************************************************************
    527  */
    528 M4OSA_ERR M4MCS_setEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates);
    529 
    530 /**
    531  ******************************************************************************
    532  * M4OSA_ERR M4MCS_getExtendedEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates)
    533  * @brief   Get the extended values of the encoding parameters
    534  * @note    Could be called after M4MCS_setEncodingParams.
    535  * @param   pContext           (IN) MCS context
    536  * @param   pRates             (OUT) Transcoding parameters
    537  * @return  M4NO_ERROR:         No error
    538  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    539  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    540  * @return  M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: Encoding settings would produce a
    541  *                                              null duration clip = encoding is impossible
    542  ******************************************************************************
    543  */
    544 M4OSA_ERR M4MCS_getExtendedEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates);
    545 
    546 /**
    547  ******************************************************************************
    548  * M4OSA_ERR M4MCS_checkParamsAndStart(M4MCS_Context pContext)
    549  * @brief
    550  * @note
    551  * @param   pContext           (IN) MCS context
    552  * @return  M4NO_ERROR:         No error
    553  * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
    554  * @return  M4ERR_STATE:        MCS is not in an appropriate state for this function to be called
    555  * @return  M4MCS_ERR_AUDIOBITRATE_TOO_HIGH: Audio bitrate too high (we limit to 96 kbps)
    556  * @return  M4MCS_ERR_AUDIOBITRATE_TOO_LOW: Audio bitrate is too low (16 kbps min for aac,
    557  *                                           12.2 for amr, 8 for mp3)
    558  * @return  M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: Begin cut and End cut are equals
    559  * @return  M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION: Begin cut time is larger than
    560  *                                                    the input clip duration
    561  * @return  M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT: End cut time is smaller than begin cut time
    562  * @return  M4MCS_ERR_MAXFILESIZE_TOO_SMALL: Not enough space to store whole output
    563  *                                            file at given bitrates
    564  * @return  M4MCS_ERR_VIDEOBITRATE_TOO_HIGH: Video bitrate too high (we limit to 800 kbps)
    565  * @return  M4MCS_ERR_VIDEOBITRATE_TOO_LOW:  Video bitrate too low
    566  ******************************************************************************
    567  */
    568 M4OSA_ERR M4MCS_checkParamsAndStart(M4MCS_Context pContext);
    569 
    570 #ifdef __cplusplus
    571 }
    572 #endif /* __cplusplus */
    573 
    574 #endif /* __M4MCS_API_H__ */
    575 
    576