4a1118ad931dda9bc18aa98257d1d4567b7c141d
[goodguy/history.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 #include "mjpegtools/yuv4mpeg.h"
27 #include "interlacemodes.h"
28
29 // AUTO FIX METHOD ====================
30
31 void ilaceautofixoption_to_text(char *string, int autofixoption)
32 {
33         const char *cp = 0;
34         switch(autofixoption) {
35         case ILACE_AUTOFIXOPTION_AUTO:          cp = ILACE_AUTOFIXOPTION_AUTO_T;        break;
36         case ILACE_AUTOFIXOPTION_MANUAL:        cp = ILACE_AUTOFIXOPTION_MANUAL_T;      break;
37         default: cp = ILACE_UNKNOWN_T;  break;
38         }
39         strcpy(string, _(cp));
40 }
41
42 int ilaceautofixoption_from_text(const char *text, int thedefault)
43 {
44         if(!strcasecmp(text, _(ILACE_AUTOFIXOPTION_AUTO_T)))    return ILACE_AUTOFIXOPTION_AUTO;
45         if(!strcasecmp(text, _(ILACE_AUTOFIXOPTION_MANUAL_T)))  return ILACE_AUTOFIXOPTION_MANUAL;
46         return thedefault;
47 }
48
49 // INTERLACE MODE ====================
50
51 void ilacemode_to_text(char *string, int ilacemode)
52 {
53         const char *cp = 0;
54         switch(ilacemode) {
55         case ILACE_MODE_UNDETECTED:     cp = ILACE_MODE_UNDETECTED_T;      break;
56         case ILACE_MODE_TOP_FIRST:      cp = ILACE_MODE_TOP_FIRST_T;       break;
57         case ILACE_MODE_BOTTOM_FIRST:   cp = ILACE_MODE_BOTTOM_FIRST_T;    break;
58         case ILACE_MODE_NOTINTERLACED:  cp = ILACE_MODE_NOTINTERLACED_T;   break;
59         default: cp = ILACE_UNKNOWN_T;  break;
60         }
61         strcpy(string, _(cp));
62 }
63
64 int ilacemode_from_text(const char *text, int thedefault)
65 {
66         if(!strcasecmp(text, _(ILACE_MODE_UNDETECTED_T)))     return ILACE_MODE_UNDETECTED;
67         if(!strcasecmp(text, _(ILACE_MODE_TOP_FIRST_T)))      return ILACE_MODE_TOP_FIRST;
68         if(!strcasecmp(text, _(ILACE_MODE_BOTTOM_FIRST_T)))   return ILACE_MODE_BOTTOM_FIRST;
69         if(!strcasecmp(text, _(ILACE_MODE_NOTINTERLACED_T)))  return ILACE_MODE_NOTINTERLACED;
70         return thedefault;
71 }
72
73 void ilacemode_to_xmltext(char *string, int ilacemode)
74 {
75         switch(ilacemode) {
76         case ILACE_MODE_UNDETECTED:     strcpy(string, ILACE_MODE_UNDETECTED_XMLT);      return;
77         case ILACE_MODE_TOP_FIRST:      strcpy(string, ILACE_MODE_TOP_FIRST_XMLT);       return;
78         case ILACE_MODE_BOTTOM_FIRST:   strcpy(string, ILACE_MODE_BOTTOM_FIRST_XMLT);    return;
79         case ILACE_MODE_NOTINTERLACED:  strcpy(string, ILACE_MODE_NOTINTERLACED_XMLT);   return;
80         }
81         strcpy(string, ILACE_UNKNOWN_T);
82 }
83
84 int ilacemode_from_xmltext(const char *text, int thedefault)
85 {
86         if( text ) {
87                 if(!strcasecmp(text, ILACE_MODE_UNDETECTED_XMLT))     return ILACE_MODE_UNDETECTED;
88                 if(!strcasecmp(text, ILACE_MODE_TOP_FIRST_XMLT))      return ILACE_MODE_TOP_FIRST;
89                 if(!strcasecmp(text, ILACE_MODE_BOTTOM_FIRST_XMLT))   return ILACE_MODE_BOTTOM_FIRST;
90                 if(!strcasecmp(text, ILACE_MODE_NOTINTERLACED_XMLT))  return ILACE_MODE_NOTINTERLACED;
91         }
92         return thedefault;
93 }
94
95 // INTERLACE FIX METHOD ====================
96
97 void ilacefixmethod_to_text(char *string, int fixmethod)
98 {
99         const char *cp = 0;
100         switch(fixmethod) {
101         case ILACE_FIXMETHOD_NONE:      cp = ILACE_FIXMETHOD_NONE_T;    break;
102         case ILACE_FIXMETHOD_UPONE:     cp = ILACE_FIXMETHOD_UPONE_T;   break;
103         case ILACE_FIXMETHOD_DOWNONE:   cp = ILACE_FIXMETHOD_DOWNONE_T; break;
104         default: cp = ILACE_UNKNOWN_T;  break;
105         }
106         strcpy(string, _(cp));
107 }
108
109 int ilacefixmethod_from_text(const char *text, int thedefault)
110 {
111         if(!strcasecmp(text, _(ILACE_FIXMETHOD_NONE_T)))        return ILACE_FIXMETHOD_NONE;
112         if(!strcasecmp(text, _(ILACE_FIXMETHOD_UPONE_T)))       return ILACE_FIXMETHOD_UPONE;
113         if(!strcasecmp(text, _(ILACE_FIXMETHOD_DOWNONE_T)))     return ILACE_FIXMETHOD_DOWNONE;
114         return thedefault;
115 }
116
117 void ilacefixmethod_to_xmltext(char *string, int fixmethod)
118 {
119         switch(fixmethod) {
120         case ILACE_FIXMETHOD_NONE:      strcpy(string, ILACE_FIXMETHOD_NONE_XMLT);      return;
121         case ILACE_FIXMETHOD_UPONE:     strcpy(string, ILACE_FIXMETHOD_UPONE_XMLT);     return;
122         case ILACE_FIXMETHOD_DOWNONE:   strcpy(string, ILACE_FIXMETHOD_DOWNONE_XMLT);   return;
123         }
124         strcpy(string, ILACE_UNKNOWN_T);
125 }
126
127 int ilacefixmethod_from_xmltext(const char *text, int thedefault)
128 {
129         if(!strcasecmp(text, ILACE_FIXMETHOD_NONE_XMLT))        return ILACE_FIXMETHOD_NONE;
130         if(!strcasecmp(text, ILACE_FIXMETHOD_UPONE_XMLT))       return ILACE_FIXMETHOD_UPONE;
131         if(!strcasecmp(text, ILACE_FIXMETHOD_DOWNONE_XMLT))     return ILACE_FIXMETHOD_DOWNONE;
132         return thedefault;
133 }
134
135 int  ilaceautofixmethod(int projectmode, int assetmode)
136 {
137         if (projectmode == assetmode)
138                 return ILACE_FIXMETHOD_NONE;
139         if( (projectmode == ILACE_MODE_BOTTOM_FIRST && assetmode == ILACE_MODE_TOP_FIRST ) ||
140             (projectmode == ILACE_MODE_TOP_FIRST  && assetmode == ILACE_MODE_BOTTOM_FIRST) )
141                 return ILACE_FIXDEFAULT;
142         // still to implement anything else...
143         return ILACE_FIXMETHOD_NONE;
144 }
145
146 int  ilaceautofixmethod2(int projectilacemode, int assetautofixoption, int assetilacemode, int assetfixmethod)
147 {
148         if (assetautofixoption == ILACE_AUTOFIXOPTION_AUTO)
149                 return (ilaceautofixmethod(projectilacemode, assetilacemode));
150         return (assetfixmethod);
151 }
152
153 int ilace_bc_to_yuv4mpeg(int ilacemode)
154 {
155         switch (ilacemode) {
156         case ILACE_MODE_UNDETECTED:     return(Y4M_UNKNOWN);
157         case ILACE_MODE_TOP_FIRST:      return(Y4M_ILACE_TOP_FIRST);
158         case ILACE_MODE_BOTTOM_FIRST: return(Y4M_ILACE_BOTTOM_FIRST);
159         case ILACE_MODE_NOTINTERLACED: return(Y4M_ILACE_NONE);
160         }
161         return(Y4M_UNKNOWN);
162 }
163
164 int ilace_yuv4mpeg_to_bc(int ilacemode)
165 {
166         switch (ilacemode) {
167         case Y4M_UNKNOWN:               return (ILACE_MODE_UNDETECTED);
168         case Y4M_ILACE_NONE:            return (ILACE_MODE_NOTINTERLACED);
169         case Y4M_ILACE_TOP_FIRST:       return (ILACE_MODE_TOP_FIRST);
170         case Y4M_ILACE_BOTTOM_FIRST:    return (ILACE_MODE_BOTTOM_FIRST);
171 //      case Y4M_ILACE_MIXED:           return (ILACE_MODE_UNDETECTED);  // fixme!!
172         }
173         return (ILACE_MODE_UNDETECTED);
174 }
175
176
177 void ilace_yuv4mpeg_mode_to_text(char *string, int ilacemode)
178 {
179         const char *cp = 0;
180         switch(ilacemode) {
181         case Y4M_UNKNOWN:             cp = ILACE_Y4M_UKNOWN_T;       break;
182         case Y4M_ILACE_NONE:          cp = ILACE_Y4M_NONE_T;         break;
183         case Y4M_ILACE_TOP_FIRST:     cp = ILACE_Y4M_TOP_FIRST_T;    break;
184         case Y4M_ILACE_BOTTOM_FIRST:  cp = ILACE_Y4M_BOTTOM_FIRST_T; break;
185 //      case Y4M_ILACE_MIXED:         cp = ILACE_Y4M_MIXED_T;        break;
186         default: cp = ILACE_UNKNOWN_T;  break;
187         }
188         strcpy(string, _(cp));
189 }
190