Clean up headers a bit more.
[blender.git] / source / blender / avi / intern / codecs.c
1 /*
2  * $Id$
3  *
4  * This is external code. Identify and convert different avi-files.
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 #include "AVI_avi.h"
33 #include "avi_intern.h"
34
35 #include "avirgb.h"
36 #include "mjpeg.h"
37 #include "rgb32.h"
38
39 void *avi_format_convert (AviMovie *movie, int stream, void *buffer, AviFormat from, AviFormat to, int *size) {
40   if (from == to)
41         return buffer;
42     
43   if (from != AVI_FORMAT_RGB24 &&
44           to != AVI_FORMAT_RGB24)
45         return avi_format_convert(movie, stream, 
46                                   avi_format_convert (movie, stream, buffer, from, AVI_FORMAT_RGB24, size), 
47                                   AVI_FORMAT_RGB24, to, size);
48   
49   switch (to) {
50   case AVI_FORMAT_RGB24:
51         switch (from) {
52         case AVI_FORMAT_AVI_RGB:
53           buffer = avi_converter_from_avi_rgb (movie, stream, buffer, size);
54           break;
55         case AVI_FORMAT_MJPEG:
56           buffer = avi_converter_from_mjpeg (movie, stream, buffer, size);
57           break;
58         case AVI_FORMAT_RGB32:
59           buffer = avi_converter_from_rgb32 (movie, stream, buffer, size);
60           break;
61         default:
62           break;
63         }
64         break;
65   case AVI_FORMAT_AVI_RGB:
66         buffer = avi_converter_to_avi_rgb (movie, stream, buffer, size);
67         break;
68   case AVI_FORMAT_MJPEG:
69         buffer = avi_converter_to_mjpeg (movie, stream, buffer, size);
70         break;
71   case AVI_FORMAT_RGB32:
72         buffer = avi_converter_to_rgb32 (movie, stream, buffer, size);
73         break;
74   default:
75         break;
76   }
77
78   return buffer;
79 }
80
81 int avi_get_data_id (AviFormat format, int stream) {
82   char fcc[5];
83
84   if (avi_get_format_type (format) == FCC("vids"))
85         sprintf (fcc,"%2.2ddc",stream);
86   else if (avi_get_format_type (format) == FCC("auds"))
87         sprintf (fcc,"%2.2ddc",stream);
88   else
89         return 0;
90
91   return FCC(fcc);
92 }
93
94 int avi_get_format_type (AviFormat format) {
95   switch (format) {
96   case AVI_FORMAT_RGB24:
97   case AVI_FORMAT_RGB32:
98   case AVI_FORMAT_AVI_RGB:
99   case AVI_FORMAT_MJPEG:
100         return FCC("vids");
101         break;
102   default:
103         return 0;
104         break;
105   }
106 }
107
108 int avi_get_format_fcc (AviFormat format) {
109   switch (format) {
110   case AVI_FORMAT_RGB24:
111   case AVI_FORMAT_RGB32:
112   case AVI_FORMAT_AVI_RGB:
113         return FCC("DIB ");
114         break;
115   case AVI_FORMAT_MJPEG:
116         return FCC("MJPG");
117         break;
118   default:
119         return 0;
120         break;
121   }
122 }
123
124 int avi_get_format_compression (AviFormat format) {
125   switch (format) {
126   case AVI_FORMAT_RGB24:
127   case AVI_FORMAT_RGB32:
128   case AVI_FORMAT_AVI_RGB:
129         return 0;
130         break;
131   case AVI_FORMAT_MJPEG:
132         return FCC("MJPG");
133         break;
134   default:
135         return 0;
136         break;
137   }
138 }