• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
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
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 #ifndef PV_AVIFILE_TYPEDEFS_H_INCLUDED
19 #define PV_AVIFILE_TYPEDEFS_H_INCLUDED
20 
21 #ifndef OSCLCONFIG_LIMITS_TYPEDEFS_H_INCLUDED
22 #include "osclconfig_limits_typedefs.h"
23 #endif
24 
25 #ifndef OSCL_BASE_H_INCLUDED
26 #include "oscl_base.h"
27 #endif
28 
29 #ifndef OSCL_STRING_UTILS_H_INCLUDED
30 #include "oscl_string_utils.h"
31 #endif
32 
33 #ifndef OSCL_STDSTRING_H_INCLUDED
34 #include "oscl_stdstring.h"
35 #endif
36 
37 #ifndef OSCL_TYPES_H_INCLUDED
38 #include "oscl_types.h"
39 #endif
40 
41 #ifndef OSCL_BYTE_ORDER_H_INCLUDED
42 #include "oscl_byte_order.h"
43 #endif
44 
45 #ifndef OSCL_MEM_H_INCLUDED
46 #include "oscl_mem.h"
47 #endif
48 
49 #ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
50 #include "oscl_string_containers.h"
51 #endif
52 
53 #ifndef OSCL_REFCOUNTER_MEMFRAG_H_INCLUDED
54 #include "oscl_refcounter_memfrag.h"
55 #endif
56 
57 #ifndef OSCL_VECTOR_H_INCLUDED
58 #include "oscl_vector.h"
59 #endif
60 
61 #ifndef OSCL_FILE_IO_H_INCLUDED
62 #include "oscl_file_io.h"
63 #endif
64 
65 #ifndef PVFILE_H_INCLUDED
66 #include "pvfile.h"
67 #endif
68 
69 
70 #ifndef PV_AVIFILE_STATUS
71 #include "pv_avifile_status.h"
72 #endif
73 
74 //avi file parser specific typedefines
75 const uint32   CHUNK_SIZE               = 4;
76 const uint32   RES_BYTES_SZ             = 4;
77 const uint32   MAX_STRN_SZ              = 100;
78 const uint32   OFFSET_FROM_MOVI_LST     = 4;
79 const uint32   MAX_COLOR_TABLE_SIZE     = 256;
80 const uint32   BIT_COUNT1               = 1;
81 const uint32   BIT_COUNT2               = 2;
82 const uint32   BIT_COUNT4               = 4;
83 const uint32   BIT_COUNT8               = 8;
84 const uint32   BIT_COUNT16              = 16;
85 const uint32   BIT_COUNT24              = 24;
86 const uint32   BIT_COUNT32              = 32;
87 
88 #define MAKE_FOURCC(a , b, c, d)        ((uint32(a) << 24) | (uint32(b) << 16) | (uint32(c) << 8) | uint32(d))
89 
90 const uint32    RIFF    MAKE_FOURCC('R', 'I', 'F', 'F');
91 const uint32    AVI     MAKE_FOURCC('A', 'V', 'I', ' ');
92 const uint32    LIST    MAKE_FOURCC('L', 'I', 'S', 'T');
93 const uint32    HDRL    MAKE_FOURCC('h', 'd', 'r', 'l');
94 const uint32    AVIH    MAKE_FOURCC('a', 'v', 'i', 'h');
95 const uint32    STRL    MAKE_FOURCC('s', 't', 'r', 'l');
96 const uint32    STRH    MAKE_FOURCC('s', 't', 'r', 'h');
97 const uint32    STRF    MAKE_FOURCC('s', 't', 'r', 'f');
98 const uint32    STRN    MAKE_FOURCC('s', 't', 'r', 'n');
99 const uint32    STRD    MAKE_FOURCC('s', 't', 'r', 'd');
100 const uint32    IDX1    MAKE_FOURCC('i', 'd', 'x', '1');
101 const uint32    INDX    MAKE_FOURCC('i', 'n', 'd', 'x');
102 const uint32    VIDS    MAKE_FOURCC('v', 'i', 'd', 's');
103 const uint32    AUDS    MAKE_FOURCC('a', 'u', 'd', 's');
104 const uint32    MIDS    MAKE_FOURCC('m', 'i', 'd', 's');
105 const uint32    TXTS    MAKE_FOURCC('t', 'x', 't', 's');
106 const uint32    DIB     MAKE_FOURCC('D', 'I', 'B', ' ');    //Device-independent Bit Map
107 const uint32    MOVI    MAKE_FOURCC('m', 'o', 'v', 'i');
108 const uint32    JUNK    MAKE_FOURCC('J', 'U', 'N', 'K');
109 
110 
111 #define WAVE_FORMAT_UNKNOWN             (0x0000)
112 
113 //following are defined by Microsoft
114 #ifndef WAVE_FORMAT_PCM
115 #define WAVE_FORMAT_PCM                 (0x0001)
116 #define WAVE_FORMAT_ADPCM               (0x0002)
117 #define WAVE_FORMAT_IBM_CVSD            (0x0005)
118 #define WAVE_FORMAT_ALAW                (0x0006)
119 #define WAVE_FORMAT_MULAW               (0x0007)
120 #define WAVE_FORMAT_OKI_ADPCM           (0x0010)
121 #define WAVE_FORMAT_DVI_ADPCM           (0x0011)
122 #define WAVE_FORMAT_DIGISTD             (0x0015)
123 #define WAVE_FORMAT_DIGIFIX             (0x0016)
124 #define WAVE_FORMAT_YAMAHA_ADPCM        (0x0020)
125 #define WAVE_FORMAT_DSP_TRUESPEECH      (0x0022)
126 #define WAVE_FORMAT_GSM610              (0x0031)
127 #endif
128 #define IBM_FORMAT_MULAW                (0x0101)
129 #define IBM_FORMAT_ALAW                 (0x0102)
130 #define IBM_FORMAT_ADPCM                (0x0103)
131 
132 #ifndef BI_RGB
133 #define BI_RGB            0
134 #endif
135 #ifndef BI_REL4
136 #define BI_REL4           1
137 #endif
138 #ifndef BI_REL8
139 #define BI_REL8           2
140 #endif
141 #ifndef BI_BITFIELDS
142 #define BI_BITFIELDS      3
143 #endif
144 #ifndef BI_ALPHABITFIELDS
145 #define BI_ALPHABITFIELDS 4
146 #endif
147 
148 class   PVAviFileParserStatus;
149 class   PVAviFileParser;
150 class   PVAviFileHeader;
151 class   PVAviFileIdxChunk;
152 
153 typedef enum
154 {
155     PV_2_AUDIO,
156     PV_2_VIDEO,
157     MIDI,
158     TEXT,
159     UNKNOWN
160 } StreamType;
161 
162 
163 //avih flags
164 const uint32    AVIF_COPYRIGHTED        = 0x01000000;
165 const uint32    AVIF_HASINDEX           = 0x10000000;
166 const uint32    AVIF_ISINTERLEAVED      = 0x100000;
167 const uint32    AVIF_MUSTUSEINDEX       = 0x010000;
168 const uint32    AVIF_WASCAPTUREFILE     = 0x100;
169 
170 //strh flags
171 const uint32    AVISF_DISABLED          = 0x01000000;
172 const uint32    AVISF_VIDEO_PALCHANGES  = 0x10000000;
173 
174 //idx1 flags
175 const uint32    AVIIF_KEYFRAME          = 0x01000000;
176 const uint32    AVIIF_LIST              = 0x10000000;
177 const uint32    AVIIF_NO_TIME           = 0x100000;
178 
179 typedef struct
180 {
181     uint16 left;
182     uint16 top;
183     uint16 right;
184     uint16 bottom;
185 } rcFrameType;
186 
187 
188 //structure to store information present in avi file main header
189 class PVAviFileMainHeaderStruct
190 {
191 
192     public:
193         //constructor
PVAviFileMainHeaderStruct()194         PVAviFileMainHeaderStruct()
195         {
196             iMicroSecPerFrame = 0;
197             iMaxBytesPerSec = 0;
198             iPadding = 0;
199             iFlags = 0;
200             iIsAVIFileCopyrighted = false;
201             iAVIFileHasIndxTbl = false;
202             iISAVIFileInterleaved = false;
203             iAVIFileMustUseIndex = false;
204             iAVIFileWasCaptureFile = false;
205             iTotalFrames = 0;
206             iInitialFrames = 0;
207             iStreams = 0;
208             iSuggestedBufferSize = 0;
209             iWidth = 0;
210             iHeight = 0;
211 
212         };
213 
214         //destructor
~PVAviFileMainHeaderStruct()215         ~PVAviFileMainHeaderStruct()
216         {
217             iMicroSecPerFrame = 0;
218             iMaxBytesPerSec = 0;
219             iPadding = 0;
220             iFlags = 0;
221             iIsAVIFileCopyrighted = false;
222             iAVIFileHasIndxTbl = false;
223             iISAVIFileInterleaved = false;
224             iAVIFileMustUseIndex = false;
225             iAVIFileWasCaptureFile = false;
226             iTotalFrames = 0;
227             iInitialFrames = 0;
228             iStreams = 0;
229             iSuggestedBufferSize = 0;
230             iWidth = 0;
231             iHeight = 0;
232 
233         };
234 
235         bool    iIsAVIFileCopyrighted;
236         bool    iAVIFileHasIndxTbl;
237         bool    iISAVIFileInterleaved;
238         bool    iAVIFileMustUseIndex;
239         bool    iAVIFileWasCaptureFile;
240         uint32  iMicroSecPerFrame;
241         uint32  iMaxBytesPerSec;
242         uint32  iPadding;
243         uint32  iFlags;
244         uint32  iTotalFrames;
245         uint32  iInitialFrames;
246         uint32  iStreams;
247         uint32  iSuggestedBufferSize;
248         uint32  iWidth;
249         uint32  iHeight;
250         uint32  iReserved[RES_BYTES_SZ];
251 
252 };
253 
254 //structure to store stream specific information
255 class PVAviFileStreamHeaderStruct
256 {
257 
258     public:
259         //constructor
PVAviFileStreamHeaderStruct()260         PVAviFileStreamHeaderStruct()
261         {
262             iStreamTypeFCC = 0;
263             iFlags = 0;
264             iIsVidPalChangeAvailable = false;
265             iAVISF_Disabled = false;
266             iPriority = 0;
267             iLanguage = 0;
268             iInitFrames = 0;
269             iScale = 0;
270             iRate = 0;
271             iStart = 0;
272             iLength = 0;
273             iSugBufSize = 0;
274             iQuality = 0;
275             iSampleSize = 0;
276             iSamplingRate = 0;
277 
278         };
279 
280         //destructor
~PVAviFileStreamHeaderStruct()281         ~PVAviFileStreamHeaderStruct()
282         {
283             iStreamTypeFCC = 0;
284             iFlags = 0;
285             iIsVidPalChangeAvailable = false;
286             iAVISF_Disabled = false;
287             iPriority = 0;
288             iLanguage = 0;
289             iInitFrames = 0;
290             iScale = 0;
291             iRate = 0;
292             iStart = 0;
293             iLength = 0;
294             iSugBufSize = 0;
295             iQuality = 0;
296             iSampleSize = 0;
297             iSamplingRate = 0;
298         }
299 
300 
301         uint32  iStreamTypeFCC;
302         uint32  iFlags;
303         bool    iIsVidPalChangeAvailable;
304         bool    iAVISF_Disabled;
305 
306         //stores codec type info for Audio and Video Stream.
307         uint8       iStreamHandler[CHUNK_SIZE];
308         uint16      iPriority;
309         uint16      iLanguage;
310         uint32      iInitFrames;
311         uint32      iScale;
312         uint32      iRate;
313         uint32      iStart;
314         uint32      iLength;    //Duration of stream
315         uint32      iSugBufSize;
316         uint32      iQuality;
317         uint32      iSampleSize;
318         rcFrameType ircFrame;
319         OsclFloat   iSamplingRate;
320 
321 };
322 
323 
324 typedef enum
325 {
326     DIVX,
327     CINEPACK,
328     INDEO,
329     DV,
330     MJPEG,
331     RGB,
332     YUV,
333     MP3,
334     PCM,
335     ADPCM
336 } StreamHandlerType;
337 
338 typedef struct
339 {
340     uint32  chunkId;
341     uint32  flags;
342     uint32  offset;
343     uint32  size;
344     bool    isKeyFrame;
345     bool    ifRecList;
346     bool    ifNoTime;
347 
348 } IdxTblType;
349 
350 typedef struct
351 {
352     uint8 Red;
353     uint8 Green;
354     uint8 Blue;
355     uint8 Flags;   //alpha entry
356 } PalletEntryStruct;
357 
358 typedef struct
359 {
360     uint8  FirstEntry;
361     uint8  NumEntries;
362     uint32 Flags;
363     Oscl_Vector<PalletEntryStruct, OsclMemAllocator> NewEntry;
364 
365 } AviPalChangeStruct;
366 
367 
368 typedef struct
369 {
370     uint32  BiSize;
371     uint32  BiWidth;
372     uint32  BiHeight;
373     uint16    BiPlanes;
374     uint16    BiBitCount;
375     uint32    BiCompression;
376     uint32    BiSizeImage;
377     uint32    BiXPelsPerMeter;
378     uint32    BiYPelsPerMeter;
379     uint32    BiClrUsed;
380     uint32    BiClrImportant;
381 } BitmapInfoHhr;
382 
383 
384 typedef struct
385 {
386     uint8   Blue;
387     uint8   Green;
388     uint8   Red;
389     uint8   Reserved;
390 
391 } RGBQuad;
392 
393 typedef struct
394 {
395     BitmapInfoHhr BmiHeader;
396     uint32 BmiColorsCount;  //number of RGBQuads actually present
397     RGBQuad BmiColors[MAX_COLOR_TABLE_SIZE];
398 
399 } BitMapInfoStruct;
400 
401 typedef struct
402 {
403     uint16    FormatTag;
404     uint16    Channels;
405     uint32    SamplesPerSec;
406     uint32    AvgBytesPerSec;
407     uint16    BlockAlign;
408     uint16    BitsPerSample;
409     uint16    Size;
410 
411 } WaveFormatExStruct;
412 
413 #endif      //#ifndef PV_AVIFILE_TYPEDEFS_H_INCLUDED
414 
415