merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
[blender.git] / source / blender / imbuf / intern / IMB_anim.h
1 /**
2  * allocimbuf.h
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31
32 #ifndef IMB_ANIM_H
33 #define IMB_ANIM_H
34
35 #ifdef _WIN32
36 #define INC_OLE2
37 #include <windows.h>
38 #include <windowsx.h>
39 #include <mmsystem.h>
40 #include <memory.h>
41 #include <commdlg.h>
42
43 #ifndef FREE_WINDOWS
44 #include <vfw.h>
45 #endif
46
47 #undef AVIIF_KEYFRAME // redefined in AVI_avi.h
48 #undef AVIIF_LIST // redefined in AVI_avi.h
49
50 #define FIXCC(fcc)  if (fcc == 0)       fcc = mmioFOURCC('N', 'o', 'n', 'e'); \
51                 if (fcc == BI_RLE8) fcc = mmioFOURCC('R', 'l', 'e', '8');
52 #endif
53
54 #include <sys/types.h>
55 #include <ctype.h>
56 #include <stdlib.h>
57 #include <stdio.h>
58 #ifndef _WIN32
59 #include <dirent.h>
60 #else
61 #include <io.h>
62 #endif
63
64 #include "BLI_blenlib.h" /* BLI_remlink BLI_filesize BLI_addtail
65                             BLI_countlist BLI_stringdec */
66
67 #include "imbuf.h"
68 #include "imbuf_patch.h"
69
70 #include "AVI_avi.h"
71
72 #ifdef WITH_QUICKTIME
73 #if defined(_WIN32) || defined(__APPLE__)
74 #include "quicktime_import.h"
75 #endif /* _WIN32 || __APPLE__ */
76 #endif /* WITH_QUICKTIME */
77
78 #ifdef WITH_FFMPEG
79 #include <libavformat/avformat.h>
80 #include <libavcodec/avcodec.h>
81 #include <libswscale/swscale.h>
82 #endif
83
84 #ifdef WITH_REDCODE
85 #ifdef _WIN32 /* on windows we use the one in extern instead */
86 #include "libredcode/format.h"
87 #else
88 #include "libredcode/format.h"
89 #endif
90 #endif
91
92 #include "IMB_imbuf_types.h"
93 #include "IMB_imbuf.h"
94
95 #include "IMB_allocimbuf.h"
96 #include "IMB_bitplanes.h"
97
98
99
100 /* actually hard coded endianness */
101 #define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
102 #define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
103 #define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
104 #define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
105
106 /* more endianness... should move to a separate file... */
107 #if defined(__sgi) || defined (__sparc) || (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
108 #define GET_ID GET_BIG_LONG
109 #define LITTLE_LONG SWAP_LONG
110 #else
111 #define GET_ID GET_LITTLE_LONG
112 #define LITTLE_LONG ENDIAN_NOP
113 #endif
114
115 /****/
116
117 #define ANIM_NONE               (0)
118 #define ANIM_SEQUENCE           (1 << 0)
119 #define ANIM_DIR                (1 << 1)
120 #define ANIM_ANIM5              (1 << 2)
121 #define ANIM_TGA                (1 << 3)
122 #define ANIM_MOVIE              (1 << 4)
123 #define ANIM_MDEC               (1 << 5)
124 #define ANIM_AVI                (1 << 6)
125 #define ANIM_QTIME              (1 << 7)
126 #define ANIM_FFMPEG             (1 << 8)
127 #define ANIM_REDCODE            (1 << 9)
128
129 #define ANIM5_MMAP              0
130 #define ANIM5_MALLOC            1
131 #define ANIM5_SNGBUF            2
132 #define ANIM5_XOR               4
133
134 #define MAXNUMSTREAMS           50
135
136 struct anim {
137         int ib_flags;
138         int curtype;
139         int curposition;        /* index  0 = 1e,  1 = 2e, enz. */
140         int duration;
141         int x, y;
142         
143                 /* voor op nummer */
144         char name[256];
145                 /* voor sequence */
146         char first[256];
147         
148                 /* anim5 */
149         struct ListBase anim5base;
150         void            * anim5mmap;
151         int             anim5len;
152         struct Anim5Delta *anim5curdlta;
153         void            (*anim5decode)(struct ImBuf *, unsigned char *);
154         int             anim5flags;
155         
156                 /* movie */
157         void *movie;
158         void *track;
159         void *params;
160         int orientation; 
161         size_t framesize;
162         int interlacing;
163         int preseek;
164         
165                 /* data */
166         struct ImBuf * ibuf1, * ibuf2;
167         
168                 /* avi */
169         struct _AviMovie *avi;
170
171 #if defined(_WIN32) && !defined(FREE_WINDOWS)
172                 /* windows avi */
173         int avistreams;
174         int firstvideo;
175         int pfileopen;
176         PAVIFILE        pfile;
177         PAVISTREAM  pavi[MAXNUMSTREAMS];        // the current streams
178         PGETFRAME         pgf;
179 #endif
180
181 #ifdef WITH_QUICKTIME
182                 /* quicktime */
183         struct _QuicktimeMovie *qtime;
184 #endif /* WITH_QUICKTIME */
185
186 #ifdef WITH_FFMPEG
187         AVFormatContext *pFormatCtx;
188         AVCodecContext *pCodecCtx;
189         AVCodec *pCodec;
190         AVFrame *pFrame;
191         AVFrame *pFrameRGB;
192         AVFrame *pFrameDeinterlaced;
193         struct SwsContext *img_convert_ctx;
194         int videoStream;
195 #endif
196
197 #ifdef WITH_REDCODE
198         struct redcode_handle * redcodeCtx;
199 #endif
200 };
201
202 #endif
203