synched with trunk at revision 34793
[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
69 #include "AVI_avi.h"
70
71 #ifdef WITH_QUICKTIME
72 #if defined(_WIN32) || defined(__APPLE__)
73 #include "quicktime_import.h"
74 #endif /* _WIN32 || __APPLE__ */
75 #endif /* WITH_QUICKTIME */
76
77 #ifdef WITH_FFMPEG
78 #include <libavformat/avformat.h>
79 #include <libavcodec/avcodec.h>
80 #include <libswscale/swscale.h>
81 #endif
82
83 #ifdef WITH_REDCODE
84 #ifdef _WIN32 /* on windows we use the one in extern instead */
85 #include "libredcode/format.h"
86 #else
87 #include "libredcode/format.h"
88 #endif
89 #endif
90
91 #include "IMB_imbuf_types.h"
92 #include "IMB_imbuf.h"
93
94 #include "IMB_allocimbuf.h"
95
96
97
98 /* actually hard coded endianness */
99 #define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
100 #define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
101 #define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
102 #define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
103
104 /* more endianness... should move to a separate file... */
105 #if defined(__sgi) || defined (__sparc) || (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
106 #define GET_ID GET_BIG_LONG
107 #define LITTLE_LONG SWAP_LONG
108 #else
109 #define GET_ID GET_LITTLE_LONG
110 #define LITTLE_LONG ENDIAN_NOP
111 #endif
112
113 /****/
114
115 #define ANIM_NONE               (0)
116 #define ANIM_SEQUENCE           (1 << 0)
117 #define ANIM_DIR                (1 << 1)
118 #define ANIM_DEPRECATED (1 << 2)
119 #define ANIM_TGA                (1 << 3)
120 #define ANIM_MOVIE              (1 << 4)
121 #define ANIM_MDEC               (1 << 5)
122 #define ANIM_AVI                (1 << 6)
123 #define ANIM_QTIME              (1 << 7)
124 #define ANIM_FFMPEG             (1 << 8)
125 #define ANIM_REDCODE            (1 << 9)
126
127 #define MAXNUMSTREAMS           50
128
129 struct _AviMovie;
130
131 struct anim {
132         int ib_flags;
133         int curtype;
134         int curposition;        /* index  0 = 1e,  1 = 2e, enz. */
135         int duration;
136         int x, y;
137         
138                 /* voor op nummer */
139         char name[256];
140                 /* voor sequence */
141         char first[256];
142         
143                 /* movie */
144         void *movie;
145         void *track;
146         void *params;
147         int orientation; 
148         size_t framesize;
149         int interlacing;
150         int preseek;
151         
152                 /* data */
153         struct ImBuf * ibuf1, * ibuf2;
154         
155                 /* avi */
156         struct _AviMovie *avi;
157
158 #if defined(_WIN32) && !defined(FREE_WINDOWS)
159                 /* windows avi */
160         int avistreams;
161         int firstvideo;
162         int pfileopen;
163         PAVIFILE        pfile;
164         PAVISTREAM  pavi[MAXNUMSTREAMS];        // the current streams
165         PGETFRAME         pgf;
166 #endif
167
168 #ifdef WITH_QUICKTIME
169                 /* quicktime */
170         struct _QuicktimeMovie *qtime;
171 #endif /* WITH_QUICKTIME */
172
173 #ifdef WITH_FFMPEG
174         AVFormatContext *pFormatCtx;
175         AVCodecContext *pCodecCtx;
176         AVCodec *pCodec;
177         AVFrame *pFrame;
178         AVFrame *pFrameRGB;
179         AVFrame *pFrameDeinterlaced;
180         struct SwsContext *img_convert_ctx;
181         int videoStream;
182 #endif
183
184 #ifdef WITH_REDCODE
185         struct redcode_handle * redcodeCtx;
186 #endif
187 };
188
189 #endif
190