summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/common/inc/M4DA_Types.h
blob: 58cab7e0b9610e730c418e2bb14c6974462e2d73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 ************************************************************************
 * @file    M4DA_Types.h
 * @brief    Data access type definition
 * @note    This file implements media specific types
 ************************************************************************
*/

#ifndef __M4DA_TYPES_H__
#define __M4DA_TYPES_H__

#include "NXPSW_CompilerSwitches.h"

#include "M4OSA_Types.h"
#include "M4OSA_Memory.h"

#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/

/**
 ************************************************************************
 * enumeration    M4_StreamType
 * @brief        Type used to describe a stream (audio or video data flow).
 ************************************************************************
*/
typedef enum
{
    M4DA_StreamTypeUnknown                = -1,    /**< Unknow type */
    M4DA_StreamTypeVideoMpeg4            = 0,    /**< MPEG-4 video */
    M4DA_StreamTypeVideoH263            = 1,    /**< H263 video */
    M4DA_StreamTypeAudioAmrNarrowBand    = 2,    /**< Amr narrow band audio */
    M4DA_StreamTypeAudioAmrWideBand        = 3,    /**< Amr wide band audio */
    M4DA_StreamTypeAudioAac                = 4,    /**< AAC audio */
    M4DA_StreamTypeAudioMp3                = 5,    /**< MP3 audio */
    M4DA_StreamTypeVideoMJpeg            = 6,    /**< MJPEG video */
    M4DA_StreamTypeAudioPcm                = 7,    /**< Wav audio */
    M4DA_StreamTypeAudioMidi            = 8,    /**< Midi audio */
    M4DA_StreamTypeVideoMpeg4Avc        = 9,    /**< MPEG-4 AVC video (h264) */
    M4DA_StreamTypeAudioAacADTS            = 10,    /**< AAC ADTS audio */
    M4DA_StreamTypeAudioAacADIF            = 11,    /**< AAC ADIF audio */
    M4DA_StreamTypeAudioWma                = 12,    /**< WMA audio */
    M4DA_StreamTypeVideoWmv                = 13,    /**< WMV video */
    M4DA_StreamTypeAudioReal            = 14,   /**< REAL audio */
    M4DA_StreamTypeVideoReal            = 15,   /**< REAL video */
    M4DA_StreamTypeAudioEvrc            = 16,   /**< Evrc audio */
    M4DA_StreamTypeTimedText            = 20,    /**< Timed Text */
    M4DA_StreamTypeAudioBba                = 21,    /**< Beat Brew audio fomat */
    M4DA_StreamTypeAudioSmaf            = 22,    /**< SMAF audio */
    M4DA_StreamTypeAudioImelody            = 23,    /**< IMELODY audio*/
    M4DA_StreamTypeAudioXmf                = 24,    /**< XMF audio */
    M4DA_StreamTypeAudioBpc                = 25,    /**< BPC audio */

    /* ADPCM */
    M4DA_StreamTypeAudioADPcm            = 26,    /**< ADPCM */

    M4DA_StreamTypeVideoARGB8888        = 27
} M4_StreamType;

/**
 ************************************************************************
 * structure    M4_StreamHandler
 * @brief        Base structure to describe a stream.
 ************************************************************************
*/
typedef struct
{
    M4_StreamType    m_streamType;                /**< Stream type */
    M4OSA_UInt32    m_streamId;                    /**< Stream Id (unique number definning
                                                        the stream) */
    M4OSA_Int32        m_duration;                    /**< Duration of the stream in milli
                                                            seconds */
    M4OSA_UInt32    m_averageBitRate;            /**< Average bitrate in kb/s */
    M4OSA_UInt32    m_maxAUSize;                /**< Maximum size of an Access Unit */
    M4OSA_UInt8*    m_pDecoderSpecificInfo;        /**< Pointer on specific information required
                                                        to create a decoder */
    M4OSA_UInt32    m_decoderSpecificInfoSize;    /**< Size of the specific information
                                                         pointer above */
    void*            m_pUserData;                /**< Pointer on User Data
                                                    (initialized by the user) */
    M4OSA_UInt32    m_structSize;                /**< Size of the structure in bytes */
    M4OSA_Bool      m_bStreamIsOK;              /**< Flag to know if stream has no errors after
                                                        parsing is finished */
    M4OSA_UInt8*    m_pH264DecoderSpecificInfo;        /**< Pointer on specific information
                                                            required to create a decoder */
    M4OSA_UInt32    m_H264decoderSpecificInfoSize;    /**< Size of the specific
                                                            information pointer above */
    // MPEG4 & AAC decoders require ESDS info
    M4OSA_UInt8*    m_pESDSInfo;                /**< Pointer on MPEG4 or AAC ESDS box */
    M4OSA_UInt32    m_ESDSInfoSize;             /**< Size of the MPEG4 or AAC ESDS box */
} M4_StreamHandler;

/**
 ************************************************************************
 * structure    M4_VideoStreamHandler
 * @brief        Extended structure to describe a video stream.
 ************************************************************************
*/
typedef struct
{
    M4_StreamHandler    m_basicProperties;        /**< Audio-Video stream common parameters */
    M4OSA_UInt32        m_videoWidth;            /**< Width of the video in the stream */
    M4OSA_UInt32        m_videoHeight;            /**< Height of the video in the stream */
    M4OSA_Float            m_averageFrameRate;        /**< Average frame rate of the video
                                                            in the stream */
    M4OSA_Int32         videoRotationDegrees;        /**< Video rotation degree */
    M4OSA_UInt32        m_structSize;            /**< Size of the structure in bytes */
} M4_VideoStreamHandler;

/**
 ************************************************************************
 * structure    M4_AudioStreamHandler
 * @brief        Extended structure to describe an audio stream.
 ************************************************************************
*/
typedef struct
{
    M4_StreamHandler    m_basicProperties;        /**< Audio-Video stream common parameters */
    M4OSA_UInt32        m_nbChannels;            /**< Number of channels in the audio stream
                                                        (1-mono, 2-stereo) */
    M4OSA_UInt32        m_byteFrameLength;        /**< Size of frame samples in bytes */
    M4OSA_UInt32        m_byteSampleSize;        /**< Number of bytes per sample */
    M4OSA_UInt32        m_samplingFrequency;    /**< Sample frequency in kHz */
    M4OSA_UInt32        m_structSize;            /**< Size of the structure in bytes */
} M4_AudioStreamHandler;

#ifdef M4VPS_SUPPORT_TTEXT

/**
 ************************************************************************
 * structure    M4_TextStreamHandler
 * @brief        Extended structure to describe a text stream.
 ************************************************************************
*/
typedef struct
{
    M4_StreamHandler    m_basicProperties;    /**< Audio-Video stream common parameters */
    M4OSA_UInt32        m_trackWidth;        /**< Width of the video in the stream */
    M4OSA_UInt32        m_trackHeight;        /**< Height of the video in the stream */
    M4OSA_UInt32        m_trackXpos;        /**< X position of the text track in video area */
    M4OSA_UInt32        m_trackYpos;        /**< Y position of the text track in video area */
    M4OSA_UInt8            back_col_rgba[4];    /**< the background color in RGBA */
    M4OSA_UInt16        uiLenght;            /**< the string lenght in bytes */
    M4OSA_UInt32        disp_flag;            /**< the way text will be displayed */
    M4OSA_UInt8            horiz_justif;        /**< the horizontal justification of the text */
    M4OSA_UInt8            verti_justif;        /**< the vertical justification of the text */
    /* style */
    M4OSA_UInt16        styl_start_char;    /**< the first character impacted by style */
    M4OSA_UInt16        styl_end_char;        /**< the last character impacted by style */
    M4OSA_UInt16        fontID;                /**< ID of the font */
    M4OSA_UInt8            face_style;            /**< the text face-style: bold, italic,
                                                         underlined, plain(default) */
    M4OSA_UInt8            font_size;            /**< size in pixel of font */
    M4OSA_UInt8            text_col_rgba[4];    /**< the text color in RGBA */
    /* box */
    M4OSA_UInt16        box_top;         /**< the top position of text box in the track area */
    M4OSA_UInt16        box_left;        /**< the left position of text box in the track area */
    M4OSA_UInt16        box_bottom;      /**< the bottom position of text box in the track area */
    M4OSA_UInt16        box_right;       /**< the right position of text box in the track area */
    M4OSA_UInt32        m_structSize;    /**< Size of the structure in bytes */
} M4_TextStreamHandler;

#endif /*M4VPS_SUPPORT_TTEXT*/

/**
 ************************************************************************
 * structure    M4_AccessUnit
 * @brief        Structure to describe an access unit.
 ************************************************************************
*/
typedef struct
{
  M4OSA_UInt32            m_streamID;       /**< Id of the stream to get an AU from */
  M4OSA_MemAddr8        m_dataAddress;      /**< Pointer to a memory area with the encoded data */
  M4OSA_UInt32            m_size;           /**< Size of the dataAdress area */
  M4OSA_Double            m_CTS;            /**< Composition Time Stamp for the Access Unit */
  M4OSA_Double            m_DTS ;           /**< Decoded Time Stamp for the Access Unit */
  M4OSA_UInt8            m_attribute;       /**< RAP information & AU corrupted */
  M4OSA_UInt32            m_maxsize;        /**< Maximum size of the AU */
  M4OSA_UInt32            m_structSize;     /**< Structure size */
} M4_AccessUnit;

#ifdef __cplusplus
}
#endif /*__cplusplus*/

#endif /* __M4DA_TYPES_H__ */