1 #include "AudioEncoder.h"
2 #include "AudioOutputCollectionPrototype.h"
3 
4 namespace ADM_qtScript
5 {
AudioOutputCollectionPrototype(QObject * parent,IEditor * editor)6 	AudioOutputCollectionPrototype::AudioOutputCollectionPrototype(QObject* parent, IEditor* editor) :
7 		QtScriptObject(editor)
8 	{
9 		this->setParent(parent);
10 		this->_tracks = editor->getPoolOfActiveAudioTrack();
11 	}
12 
getLength()13 	QScriptValue AudioOutputCollectionPrototype::getLength()
14 	{
15 		return this->_tracks->size();
16 	}
17 
add(int inputTrackIndex,QScriptValue encoder)18 	QScriptValue AudioOutputCollectionPrototype::add(int inputTrackIndex, QScriptValue encoder)
19 	{
20 		PoolOfAudioTracks* audioTracks = this->_editor->getPoolOfAudioTrack();
21 		AudioEncoder *encoderObject = qobject_cast<AudioEncoder*>(encoder.toQObject());
22 
23 		if (audioTracks->size() == 0)
24 		{
25 			return this->throwError(
26 					   "The source video doesn't contain a valid audio track to use for encoding.");
27 		}
28 
29 		QScriptValue result = this->validateNumber(
30 								  "inputTrackIndex", inputTrackIndex, 0, audioTracks->size() - 1);
31 
32 		if (!result.isUndefined())
33 		{
34 			return result;
35 		}
36 
37 		if (encoderObject != NULL && encoderObject->isEncoderUsed())
38 		{
39 			return this->throwError("Audio encoder is already being used by another audio output.");
40 		}
41 
42 		int index = this->_tracks->size();
43 		this->_tracks->addTrack(inputTrackIndex, audioTracks->at(inputTrackIndex));
44 
45 		if (encoderObject != NULL)
46 		{
47 			encoderObject->useEncoderForAudioOutput(this->_tracks->atEditable(index));
48 			this->_editor->updateDefaultAudioTrack();
49 		}
50 
51 		return index;
52 	}
53 
add(QString audioFile,QScriptValue encoder)54 	QScriptValue AudioOutputCollectionPrototype::add(QString audioFile, QScriptValue encoder)
55 	{
56 		AudioEncoder *encoderObject = qobject_cast<AudioEncoder*>(encoder.toQObject());
57 		PoolOfAudioTracks* audioTracks = this->_editor->getPoolOfAudioTrack();
58 
59 		if (encoderObject != NULL && encoderObject->isEncoderUsed())
60 		{
61 			return this->throwError("Audio encoder is already being used by another audio output.");
62 		}
63 
64 		int index = this->_tracks->size();
65 		this->_editor->addExternalAudioTrack(audioFile.toUtf8().constData());
66 		this->_tracks->addTrack(audioTracks->size() - 1, audioTracks->at(audioTracks->size() - 1));
67 
68 		if (encoderObject != NULL)
69 		{
70 			encoderObject->useEncoderForAudioOutput(this->_tracks->atEditable(index));
71 			this->_editor->updateDefaultAudioTrack();
72 		}
73 
74 		return index;
75 	}
76 
clear()77 	void AudioOutputCollectionPrototype::clear()
78 	{
79 		this->_editor->clearAudioTracks();
80 	}
81 
insert(uint index,int inputTrackIndex,QScriptValue encoder)82 	void AudioOutputCollectionPrototype::insert(uint index, int inputTrackIndex, QScriptValue encoder)
83 	{
84 		PoolOfAudioTracks* audioTracks = this->_editor->getPoolOfAudioTrack();
85 		AudioEncoder* encoderObject = qobject_cast<AudioEncoder*>(encoder.toQObject());
86 
87 		if (index > this->_tracks->size())
88 		{
89 			this->throwError("Index is out of range");
90 			return;
91 		}
92 
93 		if (audioTracks->size() == 0)
94 		{
95 			this->throwError(
96 				"The source video doesn't contain a valid audio track to use for encoding.");
97 			return;
98 		}
99 
100 		QScriptValue result = this->validateNumber(
101 								  "inputTrackIndex", inputTrackIndex, 0, audioTracks->size() - 1);
102 
103 		if (!result.isUndefined())
104 		{
105 			return;
106 		}
107 
108 		if (encoderObject != NULL && encoderObject->isEncoderUsed())
109 		{
110 			this->throwError("Audio encoder is already being used by another audio output.");
111 			return;
112 		}
113 
114 		this->_tracks->insertTrack(index, inputTrackIndex, audioTracks->at(inputTrackIndex));
115 
116 		if (encoderObject != NULL)
117 		{
118 			encoderObject->useEncoderForAudioOutput(this->_tracks->atEditable(index));
119 			this->_editor->updateDefaultAudioTrack();
120 		}
121 	}
122 
insert(uint index,QString externalAudioFile,QScriptValue encoder)123 	void AudioOutputCollectionPrototype::insert(uint index, QString externalAudioFile, QScriptValue encoder)
124 	{
125 		PoolOfAudioTracks* audioTracks = this->_editor->getPoolOfAudioTrack();
126 		AudioEncoder* encoderObject = qobject_cast<AudioEncoder*>(encoder.toQObject());
127 
128 		if (encoderObject != NULL && encoderObject->isEncoderUsed())
129 		{
130 			this->throwError("Audio encoder is already being used by another audio output.");
131 			return;
132 		}
133 
134 		this->_editor->addExternalAudioTrack(externalAudioFile.toUtf8().constData());
135 		this->_tracks->insertTrack(
136 			index, audioTracks->size() - 1, audioTracks->at(audioTracks->size() - 1));
137 
138 		if (encoderObject != NULL)
139 		{
140 			encoderObject->useEncoderForAudioOutput(this->_tracks->atEditable(index));
141 			this->_editor->updateDefaultAudioTrack();
142 		}
143 	}
144 
removeAt(uint index)145 	void AudioOutputCollectionPrototype::removeAt(uint index)
146 	{
147 		if (index >= this->_tracks->size())
148 		{
149 			this->throwError("Index is out of range");
150 			return;
151 		}
152 
153 		this->_tracks->removeTrack(index);
154 		this->_editor->updateDefaultAudioTrack();
155 	}
156 }
157