Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[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         switch(autofixoption) {
34         case BC_ILACE_AUTOFIXOPTION_AUTO:       strcpy(string, BC_ILACE_AUTOFIXOPTION_AUTO_T);          return;
35         case BC_ILACE_AUTOFIXOPTION_MANUAL:     strcpy(string, BC_ILACE_AUTOFIXOPTION_MANUAL_T);        return;
36         }
37         strcpy(string, BC_ILACE_UNKNOWN_T);
38 }
39
40 int ilaceautofixoption_from_text(const char *text, int thedefault)
41 {
42         if(!strcasecmp(text, BC_ILACE_AUTOFIXOPTION_AUTO_T))    return BC_ILACE_AUTOFIXOPTION_AUTO;
43         if(!strcasecmp(text, BC_ILACE_AUTOFIXOPTION_MANUAL_T))  return BC_ILACE_AUTOFIXOPTION_MANUAL;
44         return thedefault;
45 }
46
47 // INTERLACE MODE ====================
48
49 void ilacemode_to_text(char *string, int ilacemode)
50 {
51         switch(ilacemode) {
52         case BC_ILACE_MODE_UNDETECTED:     strcpy(string, BC_ILACE_MODE_UNDETECTED_T);      return;
53         case BC_ILACE_MODE_TOP_FIRST:      strcpy(string, BC_ILACE_MODE_TOP_FIRST_T);       return;
54         case BC_ILACE_MODE_BOTTOM_FIRST:   strcpy(string, BC_ILACE_MODE_BOTTOM_FIRST_T);    return;
55         case BC_ILACE_MODE_NOTINTERLACED:  strcpy(string, BC_ILACE_MODE_NOTINTERLACED_T);   return;
56         }
57         strcpy(string, BC_ILACE_UNKNOWN_T);
58 }
59
60 int ilacemode_from_text(const char *text, int thedefault)
61 {
62         if(!strcasecmp(text, BC_ILACE_MODE_UNDETECTED_T))     return BC_ILACE_MODE_UNDETECTED;
63         if(!strcasecmp(text, BC_ILACE_MODE_TOP_FIRST_T))      return BC_ILACE_MODE_TOP_FIRST;
64         if(!strcasecmp(text, BC_ILACE_MODE_BOTTOM_FIRST_T))   return BC_ILACE_MODE_BOTTOM_FIRST;
65         if(!strcasecmp(text, BC_ILACE_MODE_NOTINTERLACED_T))  return BC_ILACE_MODE_NOTINTERLACED;
66         return thedefault;
67 }
68
69 void ilacemode_to_xmltext(char *string, int ilacemode)
70 {
71         switch(ilacemode) {
72         case BC_ILACE_MODE_UNDETECTED:     strcpy(string, BC_ILACE_MODE_UNDETECTED_XMLT);      return;
73         case BC_ILACE_MODE_TOP_FIRST:      strcpy(string, BC_ILACE_MODE_TOP_FIRST_XMLT);       return;
74         case BC_ILACE_MODE_BOTTOM_FIRST:   strcpy(string, BC_ILACE_MODE_BOTTOM_FIRST_XMLT);    return;
75         case BC_ILACE_MODE_NOTINTERLACED:  strcpy(string, BC_ILACE_MODE_NOTINTERLACED_XMLT);   return;
76         }
77         strcpy(string, BC_ILACE_UNKNOWN_T);
78 }
79
80 int ilacemode_from_xmltext(const char *text, int thedefault)
81 {
82         if( text ) {
83                 if(!strcasecmp(text, BC_ILACE_MODE_UNDETECTED_XMLT))     return BC_ILACE_MODE_UNDETECTED;
84                 if(!strcasecmp(text, BC_ILACE_MODE_TOP_FIRST_XMLT))      return BC_ILACE_MODE_TOP_FIRST;
85                 if(!strcasecmp(text, BC_ILACE_MODE_BOTTOM_FIRST_XMLT))   return BC_ILACE_MODE_BOTTOM_FIRST;
86                 if(!strcasecmp(text, BC_ILACE_MODE_NOTINTERLACED_XMLT))  return BC_ILACE_MODE_NOTINTERLACED;
87         }
88         return thedefault;
89 }
90
91 // INTERLACE FIX METHOD ====================
92
93 void ilacefixmethod_to_text(char *string, int fixmethod)
94 {
95         switch(fixmethod) {
96         case BC_ILACE_FIXMETHOD_NONE:           strcpy(string, BC_ILACE_FIXMETHOD_NONE_T);      return;
97         case BC_ILACE_FIXMETHOD_UPONE:          strcpy(string, BC_ILACE_FIXMETHOD_UPONE_T);     return;
98         case BC_ILACE_FIXMETHOD_DOWNONE:        strcpy(string, BC_ILACE_FIXMETHOD_DOWNONE_T);   return;
99         }
100         strcpy(string, BC_ILACE_UNKNOWN_T);
101 }
102
103 int ilacefixmethod_from_text(const char *text, int thedefault)
104 {
105         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_NONE_T))        return BC_ILACE_FIXMETHOD_NONE;
106         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_UPONE_T))       return BC_ILACE_FIXMETHOD_UPONE;
107         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_DOWNONE_T))     return BC_ILACE_FIXMETHOD_DOWNONE;
108         return thedefault; 
109 }
110
111 void ilacefixmethod_to_xmltext(char *string, int fixmethod)
112 {
113         switch(fixmethod) {
114         case BC_ILACE_FIXMETHOD_NONE:           strcpy(string, BC_ILACE_FIXMETHOD_NONE_XMLT);           return;
115         case BC_ILACE_FIXMETHOD_UPONE:          strcpy(string, BC_ILACE_FIXMETHOD_UPONE_XMLT);          return;
116         case BC_ILACE_FIXMETHOD_DOWNONE:        strcpy(string, BC_ILACE_FIXMETHOD_DOWNONE_XMLT);        return;
117         }
118         strcpy(string, BC_ILACE_UNKNOWN_T);
119 }
120
121 int ilacefixmethod_from_xmltext(const char *text, int thedefault)
122 {
123         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_NONE_XMLT))     return BC_ILACE_FIXMETHOD_NONE;
124         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_UPONE_XMLT))    return BC_ILACE_FIXMETHOD_UPONE;
125         if(!strcasecmp(text, BC_ILACE_FIXMETHOD_DOWNONE_XMLT))  return BC_ILACE_FIXMETHOD_DOWNONE;
126         return thedefault; 
127 }
128
129 int  ilaceautofixmethod(int projectmode, int assetmode) 
130 {
131         if (projectmode == assetmode)
132                 return BC_ILACE_FIXMETHOD_NONE;
133         if( (projectmode == BC_ILACE_MODE_BOTTOM_FIRST && assetmode == BC_ILACE_MODE_TOP_FIRST ) ||
134             (projectmode == BC_ILACE_MODE_TOP_FIRST  && assetmode == BC_ILACE_MODE_BOTTOM_FIRST) )
135                 return BC_ILACE_FIXDEFAULT;
136         // still to implement anything else...
137         return BC_ILACE_FIXMETHOD_NONE;
138 }
139
140 int  ilaceautofixmethod2(int projectilacemode, int assetautofixoption, int assetilacemode, int assetfixmethod)
141 {
142         if (assetautofixoption == BC_ILACE_AUTOFIXOPTION_AUTO)
143                 return (ilaceautofixmethod(projectilacemode, assetilacemode));
144         return (assetfixmethod);
145 }
146
147 int ilace_bc_to_yuv4mpeg(int ilacemode)
148 {
149         switch (ilacemode) {
150         case BC_ILACE_MODE_UNDETECTED:  return(Y4M_UNKNOWN);
151         case BC_ILACE_MODE_TOP_FIRST:   return(Y4M_ILACE_TOP_FIRST);
152         case BC_ILACE_MODE_BOTTOM_FIRST: return(Y4M_ILACE_BOTTOM_FIRST);
153         case BC_ILACE_MODE_NOTINTERLACED: return(Y4M_ILACE_NONE);
154         }
155         return(Y4M_UNKNOWN);
156 }
157
158 int ilace_yuv4mpeg_to_bc(int ilacemode)
159 {
160         switch (ilacemode) {
161         case Y4M_UNKNOWN:               return (BC_ILACE_MODE_UNDETECTED);
162         case Y4M_ILACE_NONE:            return (BC_ILACE_MODE_NOTINTERLACED);
163         case Y4M_ILACE_TOP_FIRST:       return (BC_ILACE_MODE_TOP_FIRST);
164         case Y4M_ILACE_BOTTOM_FIRST:    return (BC_ILACE_MODE_BOTTOM_FIRST);
165 //      case Y4M_ILACE_MIXED:           return (BC_ILACE_MODE_UNDETECTED);  // fixme!!
166         }
167         return (BC_ILACE_MODE_UNDETECTED);
168 }
169
170
171 void ilace_yuv4mpeg_mode_to_text(char *string, int ilacemode)
172 {
173         switch(ilacemode) {
174         case Y4M_UNKNOWN:             strcpy(string, BC_ILACE_Y4M_UKNOWN_T);       return;
175         case Y4M_ILACE_NONE:          strcpy(string, BC_ILACE_Y4M_NONE_T);         return;
176         case Y4M_ILACE_TOP_FIRST:     strcpy(string, BC_ILACE_Y4M_TOP_FIRST_T);    return;
177         case Y4M_ILACE_BOTTOM_FIRST:  strcpy(string, BC_ILACE_Y4M_BOTTOM_FIRST_T); return;
178 //      case Y4M_ILACE_MIXED:         strcpy(string, BC_ILACE_Y4M_MIXED_T);        return;
179         }
180         strcpy(string, BC_ILACE_UNKNOWN_T);
181 }
182