=bmesh= merge from trunk at r36153
[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 /** \file blender/imbuf/intern/IMB_anim.h
33  *  \ingroup imbuf
34  */
35
36
37 #ifndef IMB_ANIM_H
38 #define IMB_ANIM_H
39
40 #ifdef _WIN32
41 #define INC_OLE2
42 #include <windows.h>
43 #include <windowsx.h>
44 #include <mmsystem.h>
45 #include <memory.h>
46 #include <commdlg.h>
47
48 #ifndef FREE_WINDOWS
49 #include <vfw.h>
50 #endif
51
52 #undef AVIIF_KEYFRAME // redefined in AVI_avi.h
53 #undef AVIIF_LIST // redefined in AVI_avi.h
54
55 #define FIXCC(fcc)  if (fcc == 0)       fcc = mmioFOURCC('N', 'o', 'n', 'e'); \
56                 if (fcc == BI_RLE8) fcc = mmioFOURCC('R', 'l', 'e', '8');
57 #endif
58
59 #include <sys/types.h>
60 #include <ctype.h>
61 #include <stdlib.h>
62 #include <stdio.h>
63 #ifndef _WIN32
64 #include <dirent.h>
65 #else
66 #include <io.h>
67 #endif
68
69 #include "BLI_blenlib.h" /* BLI_remlink BLI_filesize BLI_addtail
70                                                         BLI_countlist BLI_stringdec */
71
72 #include "imbuf.h"
73
74 #include "AVI_avi.h"
75
76 #ifdef WITH_QUICKTIME
77 #if defined(_WIN32) || defined(__APPLE__)
78 #include "quicktime_import.h"
79 #endif /* _WIN32 || __APPLE__ */
80 #endif /* WITH_QUICKTIME */
81
82 #ifdef WITH_FFMPEG
83 #include <libavformat/avformat.h>
84 #include <libavcodec/avcodec.h>
85 #include <libswscale/swscale.h>
86 #endif
87
88 #ifdef WITH_REDCODE
89 #ifdef _WIN32 /* on windows we use the one in extern instead */
90 #include "libredcode/format.h"
91 #else
92 #include "libredcode/format.h"
93 #endif
94 #endif
95
96 #include "IMB_imbuf_types.h"
97 #include "IMB_imbuf.h"
98
99 #include "IMB_allocimbuf.h"
100
101
102
103 /* actually hard coded endianness */
104 #define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
105 #define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
106 #define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
107 #define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
108
109 /* more endianness... should move to a separate file... */
110 #if defined(__sgi) || defined (__sparc) || (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
111 #define GET_ID GET_BIG_LONG
112 #define LITTLE_LONG SWAP_LONG
113 #else
114 #define GET_ID GET_LITTLE_LONG
115 #define LITTLE_LONG ENDIAN_NOP
116 #endif
117
118 /* anim.curtype, runtime only */
119 #define ANIM_NONE               0
120 #define ANIM_SEQUENCE   (1 << 0)
121 #define ANIM_MOVIE              (1 << 4)
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