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