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