Merging r44227 through r45619 from trunk into soc-2011-tomato
[blender.git] / source / blender / avi / intern / codecs.c
1 /*
2  *
3  * This is external code. Identify and convert different avi-files.
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30
31 /** \file blender/avi/intern/codecs.c
32  *  \ingroup avi
33  */
34
35
36 #include "AVI_avi.h"
37 #include "avi_intern.h"
38
39 #include "avirgb.h"
40 #include "mjpeg.h"
41 #include "rgb32.h"
42
43 void *avi_format_convert (AviMovie *movie, int stream, void *buffer, AviFormat from, AviFormat to, int *size)
44 {
45         if (from == to)
46                 return buffer;
47
48         if (from != AVI_FORMAT_RGB24 &&
49         to != AVI_FORMAT_RGB24)
50                 return avi_format_convert(movie, stream,
51                 avi_format_convert (movie, stream, buffer, from, AVI_FORMAT_RGB24, size),
52                 AVI_FORMAT_RGB24, to, size);
53
54         switch (to) {
55         case AVI_FORMAT_RGB24:
56                 switch (from) {
57                 case AVI_FORMAT_AVI_RGB:
58                         buffer = avi_converter_from_avi_rgb (movie, stream, buffer, size);
59                         break;
60                 case AVI_FORMAT_MJPEG:
61                         buffer = avi_converter_from_mjpeg (movie, stream, buffer, size);
62                         break;
63                 case AVI_FORMAT_RGB32:
64                         buffer = avi_converter_from_rgb32 (movie, stream, buffer, size);
65                         break;
66                 default:
67                         break;
68                 }
69                 break;
70         case AVI_FORMAT_AVI_RGB:
71                 buffer = avi_converter_to_avi_rgb (movie, stream, buffer, size);
72                 break;
73         case AVI_FORMAT_MJPEG:
74                 buffer = avi_converter_to_mjpeg (movie, stream, buffer, size);
75                 break;
76         case AVI_FORMAT_RGB32:
77                 buffer = avi_converter_to_rgb32 (movie, stream, buffer, size);
78                 break;
79         default:
80                 break;
81         }
82
83         return buffer;
84 }
85
86 int avi_get_data_id (AviFormat format, int stream)
87 {
88         char fcc[5];
89
90         if (avi_get_format_type (format) == FCC("vids"))
91                 sprintf (fcc,"%2.2ddc",stream);
92         else if (avi_get_format_type (format) == FCC("auds"))
93                 sprintf (fcc,"%2.2ddc",stream);
94         else
95                 return 0;
96
97         return FCC(fcc);
98 }
99
100 int avi_get_format_type (AviFormat format)
101 {
102         switch (format) {
103         case AVI_FORMAT_RGB24:
104         case AVI_FORMAT_RGB32:
105         case AVI_FORMAT_AVI_RGB:
106         case AVI_FORMAT_MJPEG:
107                 return FCC("vids");
108                 break;
109         default:
110                 return 0;
111                 break;
112         }
113 }
114
115 int avi_get_format_fcc (AviFormat format)
116 {
117         switch (format) {
118         case AVI_FORMAT_RGB24:
119         case AVI_FORMAT_RGB32:
120         case AVI_FORMAT_AVI_RGB:
121                 return FCC("DIB ");
122                 break;
123         case AVI_FORMAT_MJPEG:
124                 return FCC("MJPG");
125                 break;
126         default:
127                 return 0;
128                 break;
129         }
130 }
131
132 int avi_get_format_compression (AviFormat format)
133 {
134         switch (format) {
135         case AVI_FORMAT_RGB24:
136         case AVI_FORMAT_RGB32:
137         case AVI_FORMAT_AVI_RGB:
138                 return 0;
139                 break;
140         case AVI_FORMAT_MJPEG:
141                 return FCC("MJPG");
142                 break;
143         default:
144                 return 0;
145                 break;
146         }
147 }