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