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