Merged 15170:15635 from trunk (no conflicts or even merges)
[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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 <ffmpeg/avformat.h>
80 #include <ffmpeg/avcodec.h>
81 #include <ffmpeg/swscale.h>
82 #endif
83
84 #ifdef WITH_REDCODE
85 #include <redcode/format.h>
86 #endif
87
88 #include "IMB_imbuf_types.h"
89 #include "IMB_imbuf.h"
90
91 #include "IMB_allocimbuf.h"
92 #include "IMB_bitplanes.h"
93
94
95
96 /* actually hard coded endianness */
97 #define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
98 #define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
99 #define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
100 #define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
101
102 /* more endianness... should move to a separate file... */
103 #if defined(__sgi) || defined (__sparc) || (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
104 #define GET_ID GET_BIG_LONG
105 #define LITTLE_LONG SWAP_LONG
106 #else
107 #define GET_ID GET_LITTLE_LONG
108 #define LITTLE_LONG ENDIAN_NOP
109 #endif
110
111 /****/
112
113 #define ANIM_NONE               (0)
114 #define ANIM_SEQUENCE           (1 << 0)
115 #define ANIM_DIR                (1 << 1)
116 #define ANIM_ANIM5              (1 << 2)
117 #define ANIM_TGA                (1 << 3)
118 #define ANIM_MOVIE              (1 << 4)
119 #define ANIM_MDEC               (1 << 5)
120 #define ANIM_AVI                (1 << 6)
121 #define ANIM_QTIME              (1 << 7)
122 #define ANIM_FFMPEG             (1 << 8)
123 #define ANIM_REDCODE            (1 << 9)
124
125 #define ANIM5_MMAP              0
126 #define ANIM5_MALLOC            1
127 #define ANIM5_SNGBUF            2
128 #define ANIM5_XOR               4
129
130 #define MAXNUMSTREAMS           50
131
132 struct anim {
133         int ib_flags;
134         int curtype;
135         int curposition;        /* index  0 = 1e,  1 = 2e, enz. */
136         int duration;
137         int x, y;
138         
139                 /* voor op nummer */
140         char name[256];
141                 /* voor sequence */
142         char first[256];
143         
144                 /* anim5 */
145         struct ListBase anim5base;
146         void            * anim5mmap;
147         int             anim5len;
148         struct Anim5Delta *anim5curdlta;
149         void            (*anim5decode)(struct ImBuf *, unsigned char *);
150         int             anim5flags;
151         
152                 /* movie */
153         void *movie;
154         void *track;
155         void *params;
156         int orientation; 
157         size_t framesize;
158         int interlacing;
159         int preseek;
160         
161                 /* data */
162         struct ImBuf * ibuf1, * ibuf2;
163         
164                 /* avi */
165         struct _AviMovie *avi;
166
167 #if defined(_WIN32) && !defined(FREE_WINDOWS)
168                 /* windows avi */
169         int avistreams;
170         int firstvideo;
171         int pfileopen;
172         PAVIFILE        pfile;
173         PAVISTREAM  pavi[MAXNUMSTREAMS];        // the current streams
174         PGETFRAME         pgf;
175 #endif
176
177 #ifdef WITH_QUICKTIME
178                 /* quicktime */
179         struct _QuicktimeMovie *qtime;
180 #endif /* WITH_QUICKTIME */
181
182 #ifdef WITH_FFMPEG
183         AVFormatContext *pFormatCtx;
184         AVCodecContext *pCodecCtx;
185         AVCodec *pCodec;
186         AVFrame *pFrame;
187         AVFrame *pFrameRGB;
188         AVFrame *pFrameDeinterlaced;
189         struct SwsContext *img_convert_ctx;
190         int videoStream;
191 #endif
192
193 #ifdef WITH_REDCODE
194         struct redcode_handle * redcodeCtx;
195 #endif
196 };
197
198 #endif
199