add shuttle dev support, use dflt ff_a/v.png icons, mjpegtools typo patch
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / interlacemodes.C
1 /*
2  * This library is free software; you can redistribute it and/or modify it
3  * under the terms of the GNU Lesser General Public License as published
4  * by the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This library is distributed in the hope that it will be useful, but
8  * WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10  * Lesser General Public License for more details.
11  *
12  * You should have received a copy of the GNU Lesser General Public
13  * License along with this library; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
15  * USA
16  */
17
18 #include <stdlib.h>
19 #include <stdint.h>
20 #include <string.h>
21
22 #ifndef HAVE_STDINT_H
23 #define HAVE_STDINT_H
24 #endif /* HAVE_STDINT_H */
25
26 #define Y4M_UNKNOWN -1
27 #define Y4M_ILACE_NONE          0   /* non-interlaced, progressive frame */
28 #define Y4M_ILACE_TOP_FIRST     1   /* interlaced, top-field first       */
29 #define Y4M_ILACE_BOTTOM_FIRST  2   /* interlaced, bottom-field first    */
30 #define Y4M_ILACE_MIXED         3   /* mixed, "refer to frame header"    */
31
32 #include "interlacemodes.h"
33
34 // AUTO FIX METHOD ====================
35
36 void ilaceautofixoption_to_text(char *string, int autofixoption)
37 {
38         const char *cp = 0;
39         switch(autofixoption) {
40         case ILACE_AUTOFIXOPTION_AUTO:          cp = ILACE_AUTOFIXOPTION_AUTO_T;        break;
41         case ILACE_AUTOFIXOPTION_MANUAL:        cp = ILACE_AUTOFIXOPTION_MANUAL_T;      break;
42         default: cp = ILACE_UNKNOWN_T;  break;
43         }
44         strcpy(string, _(cp));
45 }
46
47 int ilaceautofixoption_from_text(const char *text, int thedefault)
48 {
49         if(!strcasecmp(text, _(ILACE_AUTOFIXOPTION_AUTO_T)))    return ILACE_AUTOFIXOPTION_AUTO;
50         if(!strcasecmp(text, _(ILACE_AUTOFIXOPTION_MANUAL_T)))  return ILACE_AUTOFIXOPTION_MANUAL;
51         return thedefault;
52 }
53
54 // INTERLACE MODE ====================
55
56 void ilacemode_to_text(char *string, int ilacemode)
57 {
58         const char *cp = 0;
59         switch(ilacemode) {
60         case ILACE_MODE_UNDETECTED:     cp = ILACE_MODE_UNDETECTED_T;      break;
61         case ILACE_MODE_TOP_FIRST:      cp = ILACE_MODE_TOP_FIRST_T;       break;
62         case ILACE_MODE_BOTTOM_FIRST:   cp = ILACE_MODE_BOTTOM_FIRST_T;    break;
63         case ILACE_MODE_NOTINTERLACED:  cp = ILACE_MODE_NOTINTERLACED_T;   break;
64         default: cp = ILACE_UNKNOWN_T;  break;
65         }
66         strcpy(string, _(cp));
67 }
68
69 int ilacemode_from_text(const char *text, int thedefault)
70 {
71         if(!strcasecmp(text, _(ILACE_MODE_UNDETECTED_T)))     return ILACE_MODE_UNDETECTED;
72         if(!strcasecmp(text, _(ILACE_MODE_TOP_FIRST_T)))      return ILACE_MODE_TOP_FIRST;
73         if(!strcasecmp(text, _(ILACE_MODE_BOTTOM_FIRST_T)))   return ILACE_MODE_BOTTOM_FIRST;
74         if(!strcasecmp(text, _(ILACE_MODE_NOTINTERLACED_T)))  return ILACE_MODE_NOTINTERLACED;
75         return thedefault;
76 }
77
78 void ilacemode_to_xmltext(char *string, int ilacemode)
79 {
80         switch(ilacemode) {
81         case ILACE_MODE_UNDETECTED:     strcpy(string, ILACE_MODE_UNDETECTED_XMLT);      return;
82         case ILACE_MODE_TOP_FIRST:      strcpy(string, ILACE_MODE_TOP_FIRST_XMLT);       return;
83         case ILACE_MODE_BOTTOM_FIRST:   strcpy(string, ILACE_MODE_BOTTOM_FIRST_XMLT);    return;
84         case ILACE_MODE_NOTINTERLACED:  strcpy(string, ILACE_MODE_NOTINTERLACED_XMLT);   return;
85         }
86         strcpy(string, ILACE_UNKNOWN_T);
87 }
88
89 int ilacemode_from_xmltext(const char *text, int thedefault)
90 {
91         if( text ) {
92                 if(!strcasecmp(text, ILACE_MODE_UNDETECTED_XMLT))     return ILACE_MODE_UNDETECTED;
93                 if(!strcasecmp(text, ILACE_MODE_TOP_FIRST_XMLT))      return ILACE_MODE_TOP_FIRST;
94                 if(!strcasecmp(text, ILACE_MODE_BOTTOM_FIRST_XMLT))   return ILACE_MODE_BOTTOM_FIRST;
95                 if(!strcasecmp(text, ILACE_MODE_NOTINTERLACED_XMLT))  return ILACE_MODE_NOTINTERLACED;
96         }
97         return thedefault;
98 }
99
100 // INTERLACE FIX METHOD ====================
101
102 void ilacefixmethod_to_text(char *string, int fixmethod)
103 {
104         const char *cp = 0;
105         switch(fixmethod) {
106         case ILACE_FIXMETHOD_NONE:      cp = ILACE_FIXMETHOD_NONE_T;    break;
107         case ILACE_FIXMETHOD_UPONE:     cp = ILACE_FIXMETHOD_UPONE_T;   break;
108         case ILACE_FIXMETHOD_DOWNONE:   cp = ILACE_FIXMETHOD_DOWNONE_T; break;
109         default: cp = ILACE_UNKNOWN_T;  break;
110         }
111         strcpy(string, _(cp));
112 }
113
114 int ilacefixmethod_from_text(const char *text, int thedefault)
115 {
116         if(!strcasecmp(text, _(ILACE_FIXMETHOD_NONE_T)))        return ILACE_FIXMETHOD_NONE;
117         if(!strcasecmp(text, _(ILACE_FIXMETHOD_UPONE_T)))       return ILACE_FIXMETHOD_UPONE;
118         if(!strcasecmp(text, _(ILACE_FIXMETHOD_DOWNONE_T)))     return ILACE_FIXMETHOD_DOWNONE;
119         return thedefault;
120 }
121
122 void ilacefixmethod_to_xmltext(char *string, int fixmethod)
123 {
124         switch(fixmethod) {
125         case ILACE_FIXMETHOD_NONE:      strcpy(string, ILACE_FIXMETHOD_NONE_XMLT);      return;
126         case ILACE_FIXMETHOD_UPONE:     strcpy(string, ILACE_FIXMETHOD_UPONE_XMLT);     return;
127         case ILACE_FIXMETHOD_DOWNONE:   strcpy(string, ILACE_FIXMETHOD_DOWNONE_XMLT);   return;
128         }
129         strcpy(string, ILACE_UNKNOWN_T);
130 }
131
132 int ilacefixmethod_from_xmltext(const char *text, int thedefault)
133 {
134         if(!strcasecmp(text, ILACE_FIXMETHOD_NONE_XMLT))        return ILACE_FIXMETHOD_NONE;
135         if(!strcasecmp(text, ILACE_FIXMETHOD_UPONE_XMLT))       return ILACE_FIXMETHOD_UPONE;
136         if(!strcasecmp(text, ILACE_FIXMETHOD_DOWNONE_XMLT))     return ILACE_FIXMETHOD_DOWNONE;
137         return thedefault;
138 }
139
140 int  ilaceautofixmethod(int projectmode, int assetmode)
141 {
142         if (projectmode == assetmode)
143                 return ILACE_FIXMETHOD_NONE;
144         if( (projectmode == ILACE_MODE_BOTTOM_FIRST && assetmode == ILACE_MODE_TOP_FIRST ) ||
145             (projectmode == ILACE_MODE_TOP_FIRST  && assetmode == ILACE_MODE_BOTTOM_FIRST) )
146                 return ILACE_FIXDEFAULT;
147         // still to implement anything else...
148         return ILACE_FIXMETHOD_NONE;
149 }
150
151 int  ilaceautofixmethod2(int projectilacemode, int assetautofixoption, int assetilacemode, int assetfixmethod)
152 {
153         if (assetautofixoption == ILACE_AUTOFIXOPTION_AUTO)
154                 return (ilaceautofixmethod(projectilacemode, assetilacemode));
155         return (assetfixmethod);
156 }
157
158 int ilace_bc_to_yuv4mpeg(int ilacemode)
159 {
160         switch (ilacemode) {
161         case ILACE_MODE_UNDETECTED:     return(Y4M_UNKNOWN);
162         case ILACE_MODE_TOP_FIRST:      return(Y4M_ILACE_TOP_FIRST);
163         case ILACE_MODE_BOTTOM_FIRST: return(Y4M_ILACE_BOTTOM_FIRST);
164         case ILACE_MODE_NOTINTERLACED: return(Y4M_ILACE_NONE);
165         }
166         return(Y4M_UNKNOWN);
167 }
168
169 int ilace_yuv4mpeg_to_bc(int ilacemode)
170 {
171         switch (ilacemode) {
172         case Y4M_UNKNOWN:               return (ILACE_MODE_UNDETECTED);
173         case Y4M_ILACE_NONE:            return (ILACE_MODE_NOTINTERLACED);
174         case Y4M_ILACE_TOP_FIRST:       return (ILACE_MODE_TOP_FIRST);
175         case Y4M_ILACE_BOTTOM_FIRST:    return (ILACE_MODE_BOTTOM_FIRST);
176 //      case Y4M_ILACE_MIXED:           return (ILACE_MODE_UNDETECTED);  // fixme!!
177         }
178         return (ILACE_MODE_UNDETECTED);
179 }
180
181
182 void ilace_yuv4mpeg_mode_to_text(char *string, int ilacemode)
183 {
184         const char *cp = 0;
185         switch(ilacemode) {
186         case Y4M_UNKNOWN:             cp = ILACE_Y4M_UKNOWN_T;       break;
187         case Y4M_ILACE_NONE:          cp = ILACE_Y4M_NONE_T;         break;
188         case Y4M_ILACE_TOP_FIRST:     cp = ILACE_Y4M_TOP_FIRST_T;    break;
189         case Y4M_ILACE_BOTTOM_FIRST:  cp = ILACE_Y4M_BOTTOM_FIRST_T; break;
190 //      case Y4M_ILACE_MIXED:         cp = ILACE_Y4M_MIXED_T;        break;
191         default: cp = ILACE_UNKNOWN_T;  break;
192         }
193         strcpy(string, _(cp));
194 }
195