1 #include <QtCore/QMetaEnum> 2 3 #include "AdmScriptMapper.h" 4 5 namespace ADM_qtScript 6 { 7 const ADM_GAINMode AdmScriptMapper::_admGainModes[] = { ADM_NO_GAIN, ADM_GAIN_MANUAL, ADM_GAIN_AUTOMATIC }; 8 const AudioOutput::GainMode AdmScriptMapper::_scriptGainModes[] = { AudioOutput::NoGain, AudioOutput::ManualGain, AudioOutput::AutomaticGain }; 9 10 const CHANNEL_CONF AdmScriptMapper::_admMixerModes[] = 11 { 12 CHANNEL_INVALID, CHANNEL_MONO, CHANNEL_STEREO, CHANNEL_2F_1R, CHANNEL_3F, CHANNEL_3F_1R, CHANNEL_2F_2R, CHANNEL_3F_2R, CHANNEL_3F_2R_LFE, 13 CHANNEL_DOLBY_PROLOGIC, CHANNEL_DOLBY_PROLOGIC2 14 }; 15 16 const AudioOutput::MixerMode AdmScriptMapper::_scriptMixerModes[] = 17 { 18 AudioOutput::OriginalMix, AudioOutput::MonoMix, AudioOutput::StereoMix, AudioOutput::TwoFrontOneRearMix, AudioOutput::ThreeFrontMix, 19 AudioOutput::ThreeFrontOneRearMix, AudioOutput::TwoFrontTwoRearMix, AudioOutput::ThreeFrontTwoRearMix, AudioOutput::ThreeFrontTwoRearLfeMix, 20 AudioOutput::DolbyProLogicMix, AudioOutput::DolbyProLogicIIMix 21 }; 22 23 const FILMCONV AdmScriptMapper::_admStretchAudioModes[] = { FILMCONV_NONE, FILMCONV_FILM2PAL, FILMCONV_PAL2FILM }; 24 25 const AudioOutput::StretchAudioMode AdmScriptMapper::_scriptStretchAudioModes[] = 26 { 27 AudioOutput::NoStretch, AudioOutput::FilmToPal, AudioOutput::PalToFilm 28 }; 29 getAudioEncoderClassName(const char * encoderName)30 QString AdmScriptMapper::getAudioEncoderClassName(const char* encoderName) 31 { 32 return this->getClassName(encoderName, "AudioEncoder"); 33 } 34 getMuxerClassName(const char * encoderName)35 QString AdmScriptMapper::getMuxerClassName(const char* encoderName) 36 { 37 return this->getClassName(encoderName, "Muxer"); 38 } 39 getVideoEncoderClassName(const char * encoderName)40 QString AdmScriptMapper::getVideoEncoderClassName(const char* encoderName) 41 { 42 return this->getClassName(encoderName, "VideoEncoder"); 43 } 44 getVideoFilterClassName(const char * encoderName)45 QString AdmScriptMapper::getVideoFilterClassName(const char* encoderName) 46 { 47 return this->getClassName(encoderName, "VideoFilter"); 48 } 49 toAdmValue(AudioOutput::GainMode gainMode)50 ADM_GAINMode AdmScriptMapper::toAdmValue(AudioOutput::GainMode gainMode) 51 { 52 return this->mapValue(gainMode, _scriptGainModes, getArrayLength(_scriptGainModes), _admGainModes); 53 } 54 toAdmValue(AudioOutput::MixerMode mixerMode)55 CHANNEL_CONF AdmScriptMapper::toAdmValue(AudioOutput::MixerMode mixerMode) 56 { 57 return this->mapValue(mixerMode, _scriptMixerModes, getArrayLength(_scriptMixerModes), _admMixerModes); 58 } 59 toAdmValue(AudioOutput::StretchAudioMode stretchAudioMode)60 FILMCONV AdmScriptMapper::toAdmValue(AudioOutput::StretchAudioMode stretchAudioMode) 61 { 62 return this->mapValue(stretchAudioMode, _scriptStretchAudioModes, getArrayLength(_scriptStretchAudioModes), _admStretchAudioModes); 63 } 64 toScriptValue(ADM_GAINMode gainMode)65 AudioOutput::GainMode AdmScriptMapper::toScriptValue(ADM_GAINMode gainMode) 66 { 67 return this->mapValue(gainMode, _admGainModes, getArrayLength(_admGainModes), _scriptGainModes); 68 } 69 toScriptValue(CHANNEL_CONF mixerMode)70 AudioOutput::MixerMode AdmScriptMapper::toScriptValue(CHANNEL_CONF mixerMode) 71 { 72 return this->mapValue(mixerMode, _admMixerModes, getArrayLength(_admMixerModes), _scriptMixerModes); 73 } 74 toScriptValue(FILMCONV stretchAudioMode)75 AudioOutput::StretchAudioMode AdmScriptMapper::toScriptValue(FILMCONV stretchAudioMode) 76 { 77 return this->mapValue(stretchAudioMode, _admStretchAudioModes, getArrayLength(_admStretchAudioModes), _scriptStretchAudioModes); 78 } 79 toScriptValueName(ADM_GAINMode gainMode)80 QString AdmScriptMapper::toScriptValueName(ADM_GAINMode gainMode) 81 { 82 return this->toScriptValueName(gainMode, AudioOutput::staticMetaObject, "GainMode"); 83 } 84 toScriptValueName(CHANNEL_CONF mixerMode)85 QString AdmScriptMapper::toScriptValueName(CHANNEL_CONF mixerMode) 86 { 87 return this->toScriptValueName(mixerMode, AudioOutput::staticMetaObject, "MixerMode"); 88 } 89 toScriptValueName(FILMCONV stretchAudioMode)90 QString AdmScriptMapper::toScriptValueName(FILMCONV stretchAudioMode) 91 { 92 return this->toScriptValueName(stretchAudioMode, AudioOutput::staticMetaObject, "StretchAudioMode"); 93 } 94 95 template<typename TArray, size_t size> getArrayLength(TArray (&)[size])96 size_t AdmScriptMapper::getArrayLength(TArray(&)[size]) 97 { 98 return size; 99 } 100 getClassName(const char * encoderName,const QString & classSuffix)101 QString AdmScriptMapper::getClassName(const char* encoderName, const QString& classSuffix) 102 { 103 QString className = QString(encoderName).toLower() + classSuffix; 104 105 return className[0].toUpper() + className.mid(1); 106 } 107 108 template<typename TSourceValueType, typename TMappedValueType> mapValue(const TSourceValueType sourceValue,const TSourceValueType sourceValues[],size_t sourceValueCount,const TMappedValueType mappedValues[])109 TMappedValueType AdmScriptMapper::mapValue( 110 const TSourceValueType sourceValue, const TSourceValueType sourceValues[], size_t sourceValueCount, const TMappedValueType mappedValues[]) 111 { 112 TMappedValueType mappedValue = mappedValues[0]; 113 114 for (size_t index = 0; index < sourceValueCount; index++) 115 { 116 if (sourceValue == sourceValues[index]) 117 { 118 mappedValue = mappedValues[index]; 119 break; 120 } 121 } 122 123 return mappedValue; 124 } 125 126 template<typename TSourceValueType> toScriptValueName(TSourceValueType sourceValue,QMetaObject mapMetaObject,const char * mapEnumName)127 QString AdmScriptMapper::toScriptValueName(TSourceValueType sourceValue, QMetaObject mapMetaObject, const char* mapEnumName) 128 { 129 int metaIndex = mapMetaObject.indexOfEnumerator(mapEnumName); 130 131 ADM_assert(metaIndex != -1); 132 133 QMetaEnum metaEnum = mapMetaObject.enumerator(metaIndex); 134 QString className = mapMetaObject.className(); 135 136 return className.mid(className.indexOf("::") + 2) + "." + QString(mapEnumName) + "." + QString(metaEnum.valueToKey(this->toScriptValue(sourceValue))); 137 } 138 } 139