#include "audiovpe.h"
#include "videovpeogl.h"
#include "log.h"
+#include "vdr.h"
+#include "woptionpane.h"
AudioVPE::AudioVPE()
{
volume = 20;
muted = 0;
lastAType = MPTYPE_MPEG_AUDIO;
+
+ canpass_ac3=false;
+ canpass_mp2=false;
+ canpass_mp3=false;
+ canpass_pcm_mch=false;
+
+ prefered_ac3=0; //0 stereo PCM, 1 passthrough 2 Multichannel PCM
+ prefered_mp2=0;
+ prefered_mp3=0;
}
AudioVPE::~AudioVPE()
return 1;
}
+bool AudioVPE::loadOptionsfromServer(VDR* vdr)
+{
+ char *name=vdr->configLoad("AudioOMX","AC3DecodingMode");
+
+ if (name != NULL) {
+ if (STRCASECMP(name, "PCM") == 0) {
+ prefered_ac3 = 0;
+ } else if (STRCASECMP(name, "Passthrough") == 0) {
+ prefered_ac3 = 1;
+ } else if (STRCASECMP(name, "PCMMultichannel") == 0) {
+ prefered_ac3 = 2;
+ }
+ }
+
+ name = vdr->configLoad("AudioOMX", "Mp2DecodingMode");
+
+ if (name != NULL) {
+ if (STRCASECMP(name, "PCM") == 0) {
+ prefered_mp2 = 0;
+ } else if (STRCASECMP(name, "Passthrough") == 0) {
+ prefered_mp2 = 1;
+ } else if (STRCASECMP(name, "PCMMultichannel") == 0) {
+ prefered_mp2 = 2;
+ }
+ }
+
+ name = vdr->configLoad("AudioOMX", "Mp3DecodingMode");
+
+ if (name != NULL) {
+ if (STRCASECMP(name, "PCM") == 0) {
+ prefered_mp3 = 0;
+ } else if (STRCASECMP(name, "Passthrough") == 0) {
+ prefered_mp3 = 1;
+ } else if (STRCASECMP(name, "PCMMultichannel") == 0) {
+ prefered_mp3 = 2;
+ }
+ }
+
+ name = vdr->configLoad("AudioOMX", "AudioOutput");
+
+ if (name != NULL) {
+ if (STRCASECMP(name, "analog") == 0) {
+ hdmi = false;
+ } else if (STRCASECMP(name, "HDMI") == 0) {
+ hdmi = true;
+ }
+ }
+
+
+ return true;
+
+}
+
+bool AudioVPE::handleOptionChanges(Option* option)
+{
+ if (Audio::handleOptionChanges(option))
+ return true;
+ switch (option->id) {
+ case 4: {
+ if (STRCASECMP(option->options[option->userSetChoice], "analog") == 0) {
+ hdmi = false;
+ } else if (STRCASECMP(option->options[option->userSetChoice], "HDMI")
+ == 0) {
+ hdmi = true;
+ }
+ return true;
+ }
+ break;
+ case 1: {
+ if (STRCASECMP(option->options[option->userSetChoice], "PCM") == 0) {
+ prefered_ac3 = 0;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "Passthrough") == 0) {
+ prefered_ac3 = 1;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "PCMMultichannel") == 0) {
+ prefered_ac3 = 2;
+ }
+ }
+ break;
+ case 2: {
+ if (STRCASECMP(option->options[option->userSetChoice], "PCM") == 0) {
+ prefered_mp2 = 0;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "Passthrough") == 0) {
+ prefered_mp2 = 1;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "PCMMultichannel") == 0) {
+ prefered_mp2 = 2;
+ }
+ }
+ break;
+ case 3: {
+ if (STRCASECMP(option->options[option->userSetChoice], "PCM") == 0) {
+ prefered_mp3 = 0;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "Passthrough") == 0) {
+ prefered_mp3 = 1;
+ } else if (STRCASECMP(option->options[option->userSetChoice],
+ "PCMMultichannel") == 0) {
+ prefered_mp3 = 2;
+ }
+ }
+ break;
+ };
+ return false;
+
+}
+
+bool AudioVPE::saveOptionstoServer()
+{
+
+ switch (prefered_ac3) {
+ case 0:
+ VDR::getInstance()->configSave("AudioOMX", "AC3DecodingMode", "PCM");
+ break;
+ case 1:
+ VDR::getInstance()->configSave("AudioOMX", "AC3DecodingMode",
+ "Passthrough");
+ break;
+ case 2:
+ VDR::getInstance()->configSave("AudioOMX", "AC3DecodingMode",
+ "PCMMultichannel");
+ break;
+ };
+
+ switch (prefered_mp2) {
+ case 0:
+ VDR::getInstance()->configSave("AudioOMX", "Mp2DecodingMode", "PCM");
+ break;
+ case 1:
+ VDR::getInstance()->configSave("AudioOMX", "Mp2DecodingMode",
+ "Passthrough");
+ break;
+ case 2:
+ VDR::getInstance()->configSave("AudioOMX", "Mp2DecodingMode",
+ "PCMMultichannel");
+ break;
+ };
+
+ switch (prefered_mp3) {
+ case 0:
+ VDR::getInstance()->configSave("AudioOMX", "Mp3DecodingMode", "PCM");
+ break;
+ case 1:
+ VDR::getInstance()->configSave("AudioOMX", "Mp3DecodingMode",
+ "Passthrough");
+ break;
+ case 2:
+ VDR::getInstance()->configSave("AudioOMX", "Mp3DecodingMode",
+ "PCMMultichannel");
+ break;
+ };
+
+ if (hdmi)
+ VDR::getInstance()->configSave("AudioOMX", "AudioOutput", "analog");
+ else
+ VDR::getInstance()->configSave("AudioOMX", "AudioOutput", "HDMI");
+
+
+ return true;
+}
+
+/*Option(UINT id, const char* displayText, const char* configSection, const char* configKey, UINT optionType,
+ UINT numChoices, UINT defaultChoice, UINT startInt,
+ const char * const * options, const char * const * optionkeys = NULL, AbstractOption* handler=NULL);*/
+
+bool AudioVPE::addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane)
+{
+ if (!Audio::addOptionsToPanes(panenumber,options,pane)) return false;
+
+
+ Option* option;
+ if (panenumber == 2)
+ {
+
+ static const char* audioopts[]={"analog","HDMI"};
+ option = new Option(4,tr("Audio Output"), "AudioOMX","AudioOutput",Option::TYPE_TEXT,2,0,0,audioopts,NULL,false,this);
+ options->push_back(option);
+ pane->addOptionLine(option);
+
+
+ char **ac3opts=new char *[3];
+ int i=0;
+ ac3opts[i]=new char[strlen("PCM")+1];
+ strcpy(ac3opts[i],"PCM");
+ i++;
+ if (canpass_ac3) {
+ ac3opts[i]=new char[strlen("Passthrough")+1];
+ strcpy(ac3opts[i],"PassThrough");
+ i++;
+ }
+ if (canpass_pcm_mch) {
+ ac3opts[i]=new char[strlen("PCMMultichannel")+1];
+ strcpy(ac3opts[i],"PCMMultichannel");
+ i++;
+ }
+ option = new Option(1 ,tr("AC3 HDMI Mode"), "AudioOMX", "AC3DecodingMode", Option::TYPE_TEXT, i, 0, 0, ac3opts,NULL,true, this);
+ options->push_back(option);
+ pane->addOptionLine(option);
+
+ char **mp2opts = new char *[3];
+ i = 0;
+ mp2opts[i] = new char[strlen("PCM") + 1];
+ strcpy(mp2opts[i], "PCM");
+ i++;
+ if (canpass_mp2) {
+ mp2opts[i] = new char[strlen("Passthrough") + 1];
+ strcpy(mp2opts[i], "PassThrough");
+ i++;
+ }
+ if (canpass_pcm_mch) {
+ mp2opts[i] = new char[strlen("PCMMultichannel") + 1];
+ strcpy(mp2opts[i], "PCMMultichannel");
+ i++;
+ }
+ option = new Option(2, tr("Mp2 HDMI Mode"), "AudioOMX",
+ "Mp2DecodingMode", Option::TYPE_TEXT, i, 0, 0,
+ mp2opts, NULL, true, this);
+ options->push_back(option);
+ pane->addOptionLine(option);
+
+ char **mp3opts = new char *[3];
+ i = 0;
+ mp3opts[i] = new char[strlen("PCM") + 1];
+ strcpy(mp3opts[i], "PCM");
+ i++;
+ if (canpass_mp3) {
+ mp3opts[i] = new char[strlen("Passthrough") + 1];
+ strcpy(mp3opts[i], "PassThrough");
+ i++;
+ }
+ if (canpass_pcm_mch) {
+ mp3opts[i] = new char[strlen("PCMMultichannel") + 1];
+ strcpy(mp3opts[i], "PCMMultichannel");
+ i++;
+ }
+ option = new Option(3, tr("Mp3 HDMI Mode"), "AudioOMX",
+ "Mp2DecodingMode", Option::TYPE_TEXT, i, 0, 0, mp3opts,
+ NULL, true, this);
+ options->push_back(option);
+ pane->addOptionLine(option);
+
+
+ }
+
+ return true;
+}
+
+
+
+
int AudioVPE::setStreamType(UCHAR type)
{
if (!initted) return 0;