Log::getInstance()->log("Audio", Log::DEBUG,
"ChangeAudioPortConfig");
+ OMX_AUDIO_CODINGTYPE encoding;
if (hdmi) {
switch (lastAType) {
case MPTYPE_MPEG_AUDIO: {
} else {
if (prefered_mp2 == 2 && canpass_mp2) {
passthrough = true;
- } else
+ encoding=OMX_AUDIO_CodingMP3;
+ } else {
passthrough = false;
+ encoding=OMX_AUDIO_CodingPCM;
+ }
}
}
break;
} else {
if (prefered_ac3 == 2 && canpass_ac3) {
passthrough = true;
- } else
+ encoding=OMX_AUDIO_CodingDDP;
+ } else {
passthrough = false;
+ encoding=OMX_AUDIO_CodingPCM;
+ }
}
}
break;
} else {
if (prefered_mp3 == 2 && canpass_mp2) {
passthrough = true;
- } else
+ encoding=OMX_AUDIO_CodingMP3;
+ } else {
passthrough = false;
+ encoding=OMX_AUDIO_CodingPCM;
+ }
}
}
break;
};
} else {
passthrough=false;
+ encoding=OMX_AUDIO_CodingPCM;
//mch=false; // multichannel also false
}
if (!omx_running) {
+ OMX_AUDIO_PARAM_PORTFORMATTYPE format;
+ memset(&format, 0, sizeof(format));
+ format.nSize = sizeof(format);
+ format.nVersion.nVersion = OMX_VERSION;
+ format.nPortIndex = omx_rend_input_port;
+ error = OMX_GetParameter(omx_aud_rend, OMX_IndexParamAudioPortFormat,
+ &format);
+ if (error != OMX_ErrorNone) {
+ Log::getInstance()->log("Audio", Log::DEBUG,
+ "Get OMX_IndexParamAudioPortFormat failed %x %d", error,
+ omx_rend_input_port);
+ return 0;
+ }
+
+ format.eEncoding = encoding;
+
+ error = OMX_SetParameter(omx_aud_rend, OMX_IndexParamAudioPortFormat,
+ &format);
+ if (error != OMX_ErrorNone) {
+ Log::getInstance()->log("Audio", Log::DEBUG,
+ "Set OMX_IndexParamAudioPortFormat failed %x %d", error,
+ omx_rend_input_port);
+ return 0;
+ }
+
if (passthrough) {
// TODO coding
} else {
video->DisablePort(omx_aud_rend,omx_rend_input_port,false);
DestroyInputBufsOMX();
}*/
+
+
+
OMX_AUDIO_PARAM_PCMMODETYPE audio_pcm;
memset(&audio_pcm, 0, sizeof(audio_pcm));
audio_pcm.nSize = sizeof(audio_pcm);
Log::getInstance()->log("Audio", Log::DEBUG,
"Init OMX_IndexParamAudioPcm failed %x %d", error,
omx_rend_input_port);
- //DeAllocateCodecsOMX();
return 0;
}
/*if (disport) {
video->UnlockClock();
paused=false;
omx_running=true;
+ setVolume(volume);
if (!video->setClockExecutingandRunning()) return 0;
return 1;
}
-int AudioOMX::mute()
-{
- if (!initted) return 0;
-
-// if (ioctl(fdAudio, AV_SET_AUD_MUTE, 1) != 0) return 0;
- Log::getInstance()->log("Audio", Log::DEBUG, "MUTE MUTE MUTE");
+int AudioOMX::mute() {
+ if (!initted)
+ return 0;
+ Log::getInstance()->log("Audio", Log::DEBUG, "MUTE MUTE MUTE");
+ if (omx_running) {
+ VideoOMX *vw = (VideoOMX*) Video::getInstance();
+ vw->LockClock();
+ OMX_AUDIO_CONFIG_MUTETYPE amute;
+ memset(&amute, 0, sizeof(amute));
+ amute.nSize = sizeof(amute);
+ amute.nVersion.nVersion = OMX_VERSION;
+ amute.nPortIndex = omx_rend_input_port;
+ amute.bMute = OMX_TRUE;
+ OMX_ERRORTYPE error= OMX_SetParameter(omx_aud_rend, OMX_IndexConfigAudioMute,
+ &amute);
+ if (error != OMX_ErrorNone) {
+ Log::getInstance()->log("Audio", Log::DEBUG,
+ "Set OMX_IndexConfigAudioMute failed %x %d", error,
+ omx_rend_input_port);
+ return 0;
+ }
+ vw->UnlockClock();
+ }
- muted = 1;
- return 1;
+ muted = 1;
+ return 1;
}
int AudioOMX::unMute()
{
if (!initted) return 0;
-// if (ioctl(fdAudio, AV_SET_AUD_MUTE, 0) != 0) return 0;
Log::getInstance()->log("Audio", Log::DEBUG, "MUTE OFF OFF OFF");
+ if (omx_running) {
+ VideoOMX *vw = (VideoOMX*) Video::getInstance();
+ vw->LockClock();
+ OMX_AUDIO_CONFIG_MUTETYPE amute;
+ memset(&amute, 0, sizeof(amute));
+ amute.nSize = sizeof(amute);
+ amute.nVersion.nVersion = OMX_VERSION;
+ amute.nPortIndex = omx_rend_input_port;
+ amute.bMute = OMX_FALSE;
+ OMX_ERRORTYPE error = OMX_SetParameter(omx_aud_rend, OMX_IndexConfigAudioMute,
+ &amute);
+ if (error != OMX_ErrorNone) {
+ Log::getInstance()->log("Audio", Log::DEBUG,
+ "Set OMX_IndexConfigAudioMute failed %x %d", error,
+ omx_rend_input_port);
+ return 0;
+ }
+ vw->UnlockClock();
+ }
muted = 0;
return 1;
// Right, that one was rubbish... 0-10 were almost
// inaudible, 11-20 did what should have been done
// over the whole 0-20 range
+ volume=tvolume;
+
+
+
+ if (omx_running) {
+ VideoOMX *vw = (VideoOMX*) Video::getInstance();
+ vw->LockClock();
+ OMX_AUDIO_CONFIG_VOLUMETYPE avol;
+ memset(&avol, 0, sizeof(avol));
+ avol.nSize = sizeof(avol);
+ avol.nVersion.nVersion = OMX_VERSION;
+ avol.nPortIndex = omx_rend_input_port;
+ avol.bLinear=OMX_FALSE;
+ avol.sVolume.nValue =(volume-20)*200;
+ OMX_ERRORTYPE error = OMX_SetParameter(omx_aud_rend, OMX_IndexConfigAudioVolume,
+ &avol);
+ if (error != OMX_ErrorNone) {
+ Log::getInstance()->log("Audio", Log::DEBUG,
+ "Set OMX_IndexConfigAudioVolume failed %x %d", error,
+ omx_rend_input_port);
+ return 0;
+ }
+ vw->UnlockClock();
+ }
- tvolume = 20 - tvolume;
-
- audio_volume Avolume;
- Avolume.frontleft = tvolume + Aoffset.frontleft;
- Avolume.frontright = tvolume + Aoffset.frontright;
- Avolume.rearleft = tvolume + Aoffset.rearleft;
- Avolume.rearright = tvolume + Aoffset.rearright;
- Avolume.center = tvolume + Aoffset.center;
- Avolume.lfe = tvolume + Aoffset.lfe;
-
-// if (ioctl(fdAudio, AV_SET_AUD_VOLUME, &Avolume) != 0) return 0;
-
-// unsigned long vol = (tvolume << 24) | (tvolume << 16);
-//
-// Log::getInstance()->log("Audio", Log::DEBUG, "%lx", vol);
-// Log::getInstance()->log("Audio", Log::DEBUG, "%i", tvolume);
-
-// if (ioctl(fdAudio, AV_SET_AUD_VOLUME, &vol) != 0) return 0;
return 1;
}