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