1 /***************************************************************************
2 \file ADM_pyAvidemux.cpp
3 \brief binding between tinyPy and avidemux
4 \author mean/gruntster 2011/2012
5 ***************************************************************************/
6
7 /***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16 #include "ADM_pyAvidemux.h"
17 #include "ADM_audiodef.h"
18 #include "ADM_vidMisc.h"
19 #include "fourcc.h"
20 #include "DIA_fileSel.h"
21 #include "DIA_coreToolkit.h"
22
23 /**
24 \fn audioProlog
25 */
audioProlog(IEditor * editor,int dex,WAVHeader & info)26 static bool audioProlog(IEditor *editor, int dex,WAVHeader &info)
27 {
28 ADM_audioStream *s=editor->getAudioStreamAt(dex);
29 if(!s)
30 {
31 ADM_warning("No audio at index %d\n",dex);
32 return false;
33 }
34 WAVHeader *h=s->getInfo();
35 if(!h)
36 {
37 ADM_warning("No header at index %d\n",dex);
38 return false;
39 }
40 info=*h;
41 return true;
42 }
43
44 /**
45 \fn
46 \brief
47 */
pyChangeAudioStream(IEditor * editor,int track)48 int pyChangeAudioStream(IEditor *editor, int track)
49 {
50 // editor->changeAudioStream(0, track);
51 return 0;
52 }
53
pyGetAudioBitrate(IEditor * editor,int dex)54 int pyGetAudioBitrate(IEditor *editor,int dex)
55 {
56 WAVHeader h;
57 if(!audioProlog(editor,dex,h)) return 0;
58 return ((h.byterate)*8)/1000;
59 }
60
61
62 /**
63 \fn pyGetAudioChannels
64 \brief
65 */
66
pyGetAudioChannels(IEditor * editor,int dex)67 int pyGetAudioChannels(IEditor *editor,int dex)
68 {
69 WAVHeader h;
70 if(!audioProlog(editor,dex,h)) return 0;
71 return h.channels;
72 }
73 /**
74 \fn pyGetAudioChannels
75 \brief
76 */
77
pyGetNumberOfAudioTracks(IEditor * editor)78 int pyGetNumberOfAudioTracks(IEditor *editor)
79 {
80 return editor->getNumberOfActiveAudioTracks();
81 }
82 /**
83 \fn
84 \brief
85 */
86
pyGetAudioFrequency(IEditor * editor,int dex)87 int pyGetAudioFrequency(IEditor *editor,int dex)
88 {
89 WAVHeader h;
90 if(!audioProlog(editor,dex,h)) return 0;
91 return h.frequency;
92
93 }
94 /**
95 \fn
96 \brief
97 */
98
pyGetAudioEncoding(IEditor * editor,int dex)99 int pyGetAudioEncoding(IEditor *editor,int dex)
100 {
101 WAVHeader h;
102 if(!audioProlog(editor,dex,h)) return 0;
103 return h.encoding;
104 }
105 /**
106 \fn
107 \brief
108 */
109
pyGetPal2Film(IEditor * editor,int dex)110 int32_t pyGetPal2Film(IEditor *editor,int dex)
111 {
112 if (editor->getAudioFilterFrameRate(dex) == FILMCONV_PAL2FILM)
113 {
114 return 1;
115 }
116
117 return 0;
118 }
119 /**
120 \fn
121 \brief
122 */
123
pyGetFilm2Pal(IEditor * editor,int dex)124 int32_t pyGetFilm2Pal(IEditor *editor,int dex)
125 {
126 if (editor->getAudioFilterFrameRate(dex) == FILMCONV_FILM2PAL)
127 {
128 return 1;
129 }
130
131 return 0;
132 }
133 /**
134 \fn
135 \brief
136 */
137
pySetPal2Film(IEditor * editor,int dex,int onoff)138 int pySetPal2Film(IEditor *editor, int dex,int onoff)
139 {
140 if (onoff)
141 {
142 editor->setAudioFilterFrameRate(dex,FILMCONV_PAL2FILM);
143 }
144 else if (pyGetPal2Film(editor,dex))
145 {
146 editor->setAudioFilterFrameRate(dex,FILMCONV_NONE);
147 }
148 return true;
149 }
150 /**
151 \fn
152 \brief
153 */
154
pySetFilm2Pal(IEditor * editor,int dex,int onoff)155 int pySetFilm2Pal(IEditor *editor, int dex,int onoff)
156 {
157 if (onoff)
158 {
159 editor->setAudioFilterFrameRate(dex,FILMCONV_FILM2PAL);
160 }
161 else if (pyGetFilm2Pal(editor,dex))
162 {
163 editor->setAudioFilterFrameRate(dex,FILMCONV_NONE);
164 }
165 return true;
166 }
167 /**
168 \fn
169 \brief
170 */
171
pyGetNormalizeMode(IEditor * editor,int dex)172 int pyGetNormalizeMode(IEditor *editor,int dex)
173 {
174 ADM_GAINMode m;
175 int32_t gain, level;
176
177 editor->getAudioFilterNormalise(dex, &m, &gain, &level);
178
179 return m;
180 }
181 /**
182 \fn
183 \brief
184 */
185
pyGetNormalizeValue(IEditor * editor,int dex)186 int pyGetNormalizeValue(IEditor *editor,int dex)
187 {
188 ADM_GAINMode m;
189 int32_t gain, level;
190
191 editor->getAudioFilterNormalise(dex, &m, &gain, &level);
192
193 return (int)gain;
194 }
195 /**
196 \fn
197 \brief
198 */
199
pyGetNormalizeLevel(IEditor * editor,int dex)200 int pyGetNormalizeLevel(IEditor *editor,int dex)
201 {
202 ADM_GAINMode m;
203 int32_t gain, level;
204
205 editor->getAudioFilterNormalise(dex, &m, &gain, &level);
206
207 return (int)level;
208 }
209 /**
210 \fn
211 \brief
212 */
213
pySetNormalize2(IEditor * editor,int dex,int mode,int value,int level)214 int pySetNormalize2(IEditor *editor, int dex, int mode, int value, int level)
215 {
216 ADM_GAINMode m;
217 int32_t gain, max;
218 // 1 - set mode
219 editor->getAudioFilterNormalise(dex, &m, &gain, &max);
220 m = (ADM_GAINMode)mode;
221 // 2- set value
222 gain = (int32_t)value;
223 max = (int32_t)level;
224 return editor->setAudioFilterNormalise(dex,m,gain,max);
225 }
226 /**
227 \fn pySetNormalize
228 \brief preserve compatibility to project scripts created by older versions
229 */
230
pySetNormalize(IEditor * editor,int dex,int mode,int value)231 int pySetNormalize(IEditor *editor, int dex, int mode, int value)
232 {
233 return pySetNormalize2(editor, dex, mode, value, -30);
234 }
235 /**
236 \fn
237 \brief
238 */
239
pySetNormalizeMode(IEditor * editor,int dex,int mode)240 int pySetNormalizeMode(IEditor *editor, int dex,int mode)
241 {
242 ADM_GAINMode m;
243 int32_t gain, level;
244
245 editor->getAudioFilterNormalise(dex, &m, &gain, &level);
246 m = (ADM_GAINMode)mode;
247 editor->setAudioFilterNormalise(dex,m,gain,level);
248 return true;
249 }
250 /**
251 \fn
252 \brief
253 */
254
pySetNormalizeValue(IEditor * editor,int dex,int value)255 int pySetNormalizeValue(IEditor *editor, int dex,int value)
256 {
257 ADM_GAINMode m;
258 int32_t gain, level;
259
260 editor->getAudioFilterNormalise(dex, &m, &gain, &level);
261 gain = (int32_t)value;
262 editor->setAudioFilterNormalise(dex,m,gain,level);
263 return true;
264 }
265 /**
266 \fn
267 \brief
268 */
269
pySetNormalizeLevel(IEditor * editor,int dex,int level)270 int pySetNormalizeLevel(IEditor *editor, int dex, int level)
271 {
272 ADM_GAINMode m;
273 int32_t gain, max;
274
275 editor->getAudioFilterNormalise(dex, &m, &gain, &max);
276 max = (int32_t)level;
277 editor->setAudioFilterNormalise(dex,m,gain,max);
278 return true;
279 }
280 /**
281 \fn
282 \brief
283 */
pyClearAudioTracks(IEditor * editor)284 int pyClearAudioTracks(IEditor *editor)
285 {
286 editor->clearAudioTracks();
287 return true;
288 }
289 /**
290 \fn
291 \brief
292 */
pyAddAudioTrack(IEditor * editor,int poolIndex)293 int pyAddAudioTrack(IEditor *editor,int poolIndex)
294 {
295 return editor->addAudioTrack(poolIndex);
296 }
297 /**
298 \fn
299 \brief
300 */
pyAddExternal(IEditor * editor,const char * fileName)301 int pyAddExternal(IEditor *editor, const char *fileName)
302 {
303 return editor->addExternalAudioTrack(fileName);
304 }
305 /**
306 \fn
307 \brief
308 */
pyGetResample(IEditor * editor,int track)309 int pyGetResample(IEditor *editor,int track)
310 {
311 return editor->getAudioResample(track);
312 }
313 /**
314 \fn
315 \brief
316 */
pySetResample(IEditor * editor,int track,int fq)317 int pySetResample(IEditor *editor,int track,int fq)
318 {
319 editor->setAudioResample(track,fq);
320 return true;
321 }
322 /**
323 \fn
324 \brief
325 */
326
pyGetDrc(IEditor * editor,int track)327 int pyGetDrc(IEditor *editor,int track)
328 {
329 return editor->getAudioDrc(track);
330 }
331 /**
332 \fn
333 \brief
334 */
335
pySetDrc(IEditor * editor,int track,int onoff)336 int pySetDrc(IEditor *editor,int track, int onoff)
337 {
338 editor->setAudioDrc(track,onoff);
339 return true;
340 }
341 /**
342 \fn
343 \brief
344 */
345
pySetAudioShift(IEditor * editor,int track,int onoff,int value)346 int pySetAudioShift(IEditor *editor,int track, int onoff,int value)
347 {
348 editor->setAudioShift(track,onoff,value);
349 return true;
350 }
351 /**
352 \fn
353 \brief
354 */
355
pyGetAudioShift(IEditor * editor,int track,int * onoff,int * value)356 int pyGetAudioShift(IEditor *editor,int track, int *onoff,int *value)
357 {
358 bool bon;
359 editor->getAudioShift(track,&bon,value);
360 *onoff=bon;
361 return true;
362 }
363
364 // EOF
365