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  * @file    M4_VideoEditingCommon.h
     19  * @brief    Video Editing (VSS3GPP, MCS, PTO3GPP) common definitions
     20  * @note
     21  ******************************************************************************
     22 */
     23 
     24 #ifndef __M4_VIDEOEDITINGCOMMON_H__
     25 #define __M4_VIDEOEDITINGCOMMON_H__
     26 
     27 #ifdef __cplusplus
     28 extern "C" {
     29 #endif
     30 
     31 /**
     32  *    Version */
     33 /* CHANGE_VERSION_HERE */
     34 #define M4VIDEOEDITING_VERSION_MAJOR    3
     35 #define M4VIDEOEDITING_VERSION_MINOR    1
     36 #define M4VIDEOEDITING_VERSION_REVISION    0
     37 
     38 #define M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE 0x7fffffff
     39 #define M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL 0x7fffffff
     40 
     41 /**
     42  ******************************************************************************
     43  * enum        M4VIDEOEDITING_FileType
     44  * @brief    This enum defines the file format type to be used
     45  ******************************************************************************
     46 */
     47 typedef enum {
     48     M4VIDEOEDITING_kFileType_3GPP        = 0,      /**< 3GPP file media type : input & output */
     49     M4VIDEOEDITING_kFileType_MP4         = 1,      /**< MP4  file media type : input          */
     50     M4VIDEOEDITING_kFileType_AMR         = 2,      /**< AMR  file media type : input & output */
     51     M4VIDEOEDITING_kFileType_MP3         = 3,      /**< MP3  file media type : input          */
     52     M4VIDEOEDITING_kFileType_PCM         = 4,      /**< PCM RAW file media type : input    RC */
     53     M4VIDEOEDITING_kFileType_JPG         = 5,      /**< STILL PICTURE FEATURE: JPG file media
     54                                                         type : input AND OUTPUT */
     55     M4VIDEOEDITING_kFileType_BMP         = 6,      /**< STILL PICTURE FEATURE: BMP file media
     56                                                         type : input only */
     57     M4VIDEOEDITING_kFileType_GIF         = 7,      /**< STILL PICTURE FEATURE: GIF file media
     58                                                         type : input only */
     59     M4VIDEOEDITING_kFileType_PNG         = 8,      /**< STILL PICTURE FEATURE: PNG file media
     60                                                         type : input only */
     61     M4VIDEOEDITING_kFileType_ARGB8888    = 9,      /**< STILL PICTURE FEATURE: ARGB8888 file
     62                                                         media type : input only */
     63     M4VIDEOEDITING_kFileType_M4V         = 10,     /**< M4V  file media type : input only     */
     64     M4VIDEOEDITING_kFileType_Unsupported = 255     /**< Unsupported file media type           */
     65 } M4VIDEOEDITING_FileType;
     66 
     67 
     68 /**
     69  ******************************************************************************
     70  * enum        M4VIDEOEDITING_VideoFormat
     71  * @brief    This enum defines the avalaible video compression formats.
     72  ******************************************************************************
     73 */
     74 typedef enum
     75 {
     76     M4VIDEOEDITING_kNoneVideo = 0, /**< Video not present */
     77     M4VIDEOEDITING_kH263 = 1, /**< H263 video */
     78     M4VIDEOEDITING_kH264 = 2,    /**< H264 video */
     79     M4VIDEOEDITING_kMPEG4 = 3, /**< MPEG-4 video */
     80     M4VIDEOEDITING_kNullVideo = 254,  /**< Do not care video type, use NULL encoder */
     81     M4VIDEOEDITING_kUnsupportedVideo = 255    /**< Unsupported video stream type */
     82 } M4VIDEOEDITING_VideoFormat;
     83 
     84 /**
     85  ******************************************************************************
     86  * enum        M4VIDEOEDITING_AudioFormat
     87  * @brief    This enum defines the avalaible audio format.
     88  * @note    HE_AAC, HE_AAC_v2 and MP3 can not be used for the output audio format
     89  ******************************************************************************
     90 */
     91 typedef enum {
     92     M4VIDEOEDITING_kNoneAudio            = 0,    /**< Audio not present */
     93     M4VIDEOEDITING_kAMR_NB              = 1,    /**< AMR Narrow Band audio */
     94     M4VIDEOEDITING_kAAC                    = 2,    /**< AAC audio */
     95     M4VIDEOEDITING_kAACplus                = 3,    /**< AAC+ audio */
     96     M4VIDEOEDITING_keAACplus             = 4,    /**< Enhanced AAC+ audio */
     97     M4VIDEOEDITING_kMP3                 = 5,    /**< MP3 audio */
     98     M4VIDEOEDITING_kEVRC                = 6,    /**< EVRC audio */
     99     M4VIDEOEDITING_kPCM                 = 7,    /**< PCM audio */
    100     M4VIDEOEDITING_kNullAudio           = 254,  /**< Do not care audio type, use NULL encoder */
    101     M4VIDEOEDITING_kUnsupportedAudio    = 255    /**< Unsupported audio stream type */
    102 } M4VIDEOEDITING_AudioFormat;
    103 
    104 /**
    105  ******************************************************************************
    106  * enum        M4VIDEOEDITING_VideoFrameSize
    107  * @brief    This enum defines the available output frame sizes.
    108  ******************************************************************************
    109 */
    110 typedef enum
    111 {
    112     M4VIDEOEDITING_kSQCIF=0, /**< SQCIF 128x96  */
    113     M4VIDEOEDITING_kQQVGA,   /**< QQVGA 160x120 */
    114     M4VIDEOEDITING_kQCIF,    /**< QCIF  176x144 */
    115     M4VIDEOEDITING_kQVGA,    /**< QVGA  320x240 */
    116     M4VIDEOEDITING_kCIF,     /**< CIF   352x288 */
    117     M4VIDEOEDITING_kVGA,     /**< VGA   640x480 */
    118 /* +PR LV5807 */
    119     M4VIDEOEDITING_kWVGA,    /**< WVGA 800x480 */
    120     M4VIDEOEDITING_kNTSC,    /**< NTSC 720x480 */
    121 /* -PR LV5807 */
    122 
    123 /* +CR Google */
    124     M4VIDEOEDITING_k640_360,  /**< 640x360 */
    125     M4VIDEOEDITING_k854_480,  /**< 854x480 */
    126     M4VIDEOEDITING_k1280_720, /**< 720p 1280x720 */
    127     M4VIDEOEDITING_k1080_720, /**< 720p 1080x720 */
    128     M4VIDEOEDITING_k960_720,  /**< 720p 960x720 */
    129     M4VIDEOEDITING_k1920_1080 /**<1080p 1920x1080*/
    130 /* -CR Google */
    131 
    132 } M4VIDEOEDITING_VideoFrameSize;
    133 
    134 
    135 /**
    136  ******************************************************************************
    137  * enum        M4VIDEOEDITING_Videoframerate
    138  * @brief    This enum defines the available video framerates.
    139  ******************************************************************************
    140 */
    141 typedef enum
    142 {
    143     M4VIDEOEDITING_k5_FPS = 0,
    144     M4VIDEOEDITING_k7_5_FPS,
    145     M4VIDEOEDITING_k10_FPS,
    146     M4VIDEOEDITING_k12_5_FPS,
    147     M4VIDEOEDITING_k15_FPS,
    148     M4VIDEOEDITING_k20_FPS,
    149     M4VIDEOEDITING_k25_FPS,
    150     M4VIDEOEDITING_k30_FPS
    151 } M4VIDEOEDITING_VideoFramerate;
    152 
    153 
    154 /**
    155  ******************************************************************************
    156  * enum        M4VIDEOEDITING_AudioSamplingFrequency
    157  * @brief    This enum defines the available output audio sampling frequencies
    158  * @note    8 kHz is the only supported frequency for AMR-NB output
    159  * @note    16 kHz is the only supported frequency for AAC output
    160  * @note    The recommended practice is to use the Default value when setting the encoding parameters
    161  ******************************************************************************
    162 */
    163 typedef enum {
    164     M4VIDEOEDITING_kDefault_ASF    = 0,    /**< Default Audio Sampling Frequency for selected
    165                                                  Audio output format */
    166     M4VIDEOEDITING_k8000_ASF    = 8000,    /**< Note: Default audio Sampling Frequency for
    167                                                     AMR-NB output */
    168     M4VIDEOEDITING_k11025_ASF    = 11025,
    169     M4VIDEOEDITING_k12000_ASF    = 12000,
    170     M4VIDEOEDITING_k16000_ASF    = 16000,    /**< Note: Default audio Sampling Frequency
    171                                                      for AAC output */
    172     M4VIDEOEDITING_k22050_ASF    = 22050,
    173     M4VIDEOEDITING_k24000_ASF    = 24000,
    174     M4VIDEOEDITING_k32000_ASF    = 32000,
    175     M4VIDEOEDITING_k44100_ASF    = 44100,
    176     M4VIDEOEDITING_k48000_ASF    = 48000
    177 
    178 } M4VIDEOEDITING_AudioSamplingFrequency;
    179 
    180 
    181 /**
    182  ******************************************************************************
    183  * enum        M4VIDEOEDITING_Bitrate
    184  * @brief    This enum defines the available audio or video bitrates.
    185  ******************************************************************************
    186 */
    187 typedef enum
    188 {
    189     M4VIDEOEDITING_kVARIABLE_KBPS = -1,     /* no regulation */
    190     M4VIDEOEDITING_kUndefinedBitrate = 0,   /* undefined */
    191     M4VIDEOEDITING_k8_KBPS = 8000,
    192     M4VIDEOEDITING_k9_2_KBPS = 9200,        /* evrc only */
    193     M4VIDEOEDITING_k12_2_KBPS = 12200,      /* amr only */
    194     M4VIDEOEDITING_k16_KBPS = 16000,
    195     M4VIDEOEDITING_k24_KBPS = 24000,
    196     M4VIDEOEDITING_k32_KBPS = 32000,
    197     M4VIDEOEDITING_k40_KBPS = 40000,
    198     M4VIDEOEDITING_k48_KBPS = 48000,
    199     M4VIDEOEDITING_k56_KBPS = 56000,
    200     M4VIDEOEDITING_k64_KBPS = 64000,
    201     M4VIDEOEDITING_k80_KBPS = 80000,
    202     M4VIDEOEDITING_k96_KBPS = 96000,
    203     M4VIDEOEDITING_k112_KBPS = 112000,
    204     M4VIDEOEDITING_k128_KBPS = 128000,
    205     M4VIDEOEDITING_k160_KBPS = 160000,
    206     M4VIDEOEDITING_k192_KBPS = 192000,
    207     M4VIDEOEDITING_k224_KBPS = 224000,
    208     M4VIDEOEDITING_k256_KBPS = 256000,
    209     M4VIDEOEDITING_k288_KBPS = 288000,
    210     M4VIDEOEDITING_k320_KBPS = 320000,
    211     M4VIDEOEDITING_k384_KBPS = 384000,
    212     M4VIDEOEDITING_k512_KBPS = 512000,
    213     M4VIDEOEDITING_k800_KBPS = 800000,
    214 /*+ New Encoder bitrates */
    215     M4VIDEOEDITING_k2_MBPS = 2000000,
    216     M4VIDEOEDITING_k5_MBPS = 5000000,
    217     M4VIDEOEDITING_k8_MBPS = 8000000,
    218 /*- New Encoder bitrates */
    219 } M4VIDEOEDITING_Bitrate;
    220 
    221 
    222 /**
    223  ******************************************************************************
    224  * structure    M4VIDEOEDITING_FtypBox
    225  * @brief        Information to build the 'ftyp' atom
    226  ******************************************************************************
    227 */
    228 #define M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS 10
    229 typedef struct
    230 {
    231     /* All brand fields are actually char[4] stored in big-endian integer format */
    232 
    233     M4OSA_UInt32    major_brand;           /* generally '3gp4'            */
    234     M4OSA_UInt32    minor_version;         /* generally '0000' or 'x.x '  */
    235     M4OSA_UInt32    nbCompatibleBrands;    /* number of compatible brands */
    236     M4OSA_UInt32    compatible_brands[M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS]; /* array of
    237                                                                          max compatible brands */
    238 
    239 } M4VIDEOEDITING_FtypBox;
    240 
    241 /* Some useful brands */
    242 #define M4VIDEOEDITING_BRAND_0000  0x00000000
    243 #define M4VIDEOEDITING_BRAND_3G2A  0x33673261
    244 #define M4VIDEOEDITING_BRAND_3GP4  0x33677034
    245 #define M4VIDEOEDITING_BRAND_3GP5  0x33677035
    246 #define M4VIDEOEDITING_BRAND_3GP6  0x33677036
    247 #define M4VIDEOEDITING_BRAND_AVC1  0x61766331
    248 #define M4VIDEOEDITING_BRAND_EMP   0x656D7020
    249 #define M4VIDEOEDITING_BRAND_ISOM  0x69736F6D
    250 #define M4VIDEOEDITING_BRAND_MP41  0x6D703431
    251 #define M4VIDEOEDITING_BRAND_MP42  0x6D703432
    252 #define M4VIDEOEDITING_BRAND_VFJ1  0x76666A31
    253 
    254 /**
    255  ******************************************************************************
    256  * enum     M4VIDEOEDITING_ClipProperties
    257  * @brief   This structure gathers the information related to an input file
    258  ******************************************************************************
    259 */
    260 typedef struct {
    261 
    262     /**
    263      * Common */
    264     M4OSA_Bool                          bAnalysed;           /**< Flag to know if the file has
    265                                                                   been already analysed or not */
    266     M4OSA_UInt8                         Version[3];          /**< Version of the libraries used to
    267                                                                   perform the clip analysis */
    268     M4OSA_UInt32                        uiClipDuration;      /**< Clip duration (in ms) */
    269     M4VIDEOEDITING_FileType             FileType;            /**< .3gp, .amr, .mp3 */
    270     M4VIDEOEDITING_FtypBox              ftyp;                /**< 3gp 'ftyp' atom, major_brand =
    271                                                                     0 if not used */
    272 
    273     /**
    274      * Video */
    275     M4VIDEOEDITING_VideoFormat          VideoStreamType;     /**< Format of the video stream */
    276     M4OSA_UInt32                        uiClipVideoDuration; /**< Video track duration (in ms) */
    277     M4OSA_UInt32                        uiVideoBitrate;      /**< Video average bitrate (in bps)*/
    278     M4OSA_UInt32                        uiVideoMaxAuSize;    /**< Maximum Access Unit size of the
    279                                                                   video stream */
    280     M4OSA_UInt32                        uiVideoWidth;        /**< Video frame width */
    281     M4OSA_UInt32                        uiVideoHeight;       /**< Video frame height */
    282     M4OSA_UInt32                        uiVideoTimeScale;    /**< Video time scale */
    283     M4OSA_Float                         fAverageFrameRate;   /**< Average frame rate of the video
    284                                                                   stream */
    285     M4OSA_Int32 uiVideoLevel;   /**< video level*/
    286     M4OSA_Int32 uiVideoProfile; /**< video profile */
    287 
    288     M4OSA_Bool                          bMPEG4dataPartition; /**< MPEG-4 uses data partitioning */
    289     M4OSA_Bool                          bMPEG4rvlc;          /**< MPEG-4 uses RVLC tool */
    290     M4OSA_Bool                          bMPEG4resynchMarker; /**< MPEG-4 stream uses Resynch
    291                                                                    Marker */
    292 
    293     /**
    294      * Audio */
    295     M4VIDEOEDITING_AudioFormat          AudioStreamType;     /**< Format of the audio stream */
    296     M4OSA_UInt32                        uiClipAudioDuration; /**< Audio track duration (in ms) */
    297     M4OSA_UInt32                        uiAudioBitrate;      /**< Audio average bitrate (in bps) */
    298     M4OSA_UInt32                        uiAudioMaxAuSize;    /**< Maximum Access Unit size of the
    299                                                                     audio stream */
    300     M4OSA_UInt32                        uiNbChannels;        /**< Number of channels
    301                                                                     (1=mono, 2=stereo) */
    302     M4OSA_UInt32                        uiSamplingFrequency; /**< Sampling audio frequency
    303                                                            (8000 for amr, 16000 or more for aac) */
    304     M4OSA_UInt32                        uiExtendedSamplingFrequency; /**< Extended frequency for
    305                                                                          AAC+, eAAC+ streams */
    306     M4OSA_UInt32                        uiDecodedPcmSize;    /**< Size of the decoded PCM data */
    307 
    308     /**
    309      * Video editing compatibility chart */
    310     M4OSA_Bool      bVideoIsEditable;                        /**< Video stream can be decoded and
    311                                                                  re-encoded */
    312     M4OSA_Bool      bAudioIsEditable;                        /**< Audio stream can be decoded and
    313                                                                   re-encoded */
    314     M4OSA_Bool      bVideoIsCompatibleWithMasterClip;        /**< Video properties match reference
    315                                                                   clip properties */
    316     M4OSA_Bool      bAudioIsCompatibleWithMasterClip;        /**< Audio properties match reference
    317                                                                    clip properties */
    318 
    319     /**
    320      * Still Picture */
    321     M4OSA_UInt32                        uiStillPicWidth;        /**< Image width */
    322     M4OSA_UInt32                        uiStillPicHeight;       /**< Image height */
    323     M4OSA_UInt32                        uiClipAudioVolumePercentage;
    324     M4OSA_Bool                          bSetImageData;
    325 
    326     M4OSA_Int32     videoRotationDegrees;        /**< Video rotation degree */
    327 
    328 } M4VIDEOEDITING_ClipProperties;
    329 
    330 
    331 #ifdef __cplusplus
    332     }
    333 #endif
    334 
    335 #endif /* __M4_VIDEOEDITINGCOMMON_H__ */
    336 
    337