AudioOMX::AudioOMX()
{
- initted = 0;
- streamType = 0;
volume = 20;
- muted = 0;
lastAType = MPTYPE_MPEG_AUDIO;
-
- canpass_ac3 = false;
- canpass_mp2 = false;
- canpass_mp3 = false;
- canpass_aac = false;
- canpass_pcm_mch = false;
-
- prefered_ac3 = 0; //0 stereo PCM, 1 passthrough 2 Multichannel PCM
- prefered_mp2 = 0;
- prefered_mp3 = 0;
- prefered_aac = 0;
- hdmi = true;
-
- omx_running = false;
-
- omx_aud_rend/*dec*/ = 0;
- cur_input_buf_omx = NULL;
-
- ac3codec_libav = NULL;
- ac3codec_context_libav = NULL;
-
- mp23codec_libav = NULL;
- mp23codec_context_libav = NULL;
-
- resam_con_libav = NULL;
-
- decompress_buffer = NULL;
- decompress_buffer_size = 0;
- decompress_buffer_filled = 0;
- mp3sameheader = 0;
- mp3sameheadercount = 0;
-
strcpy(L_VPE_OMX_AUDIO_REND, VPE_OMX_AUDIO_REND);
}
int AudioOMX::init(u1 tstreamType)
{
- if (initted)
- return 0;
+ if (initted) return 0;
- initted = 1;
+ logger = LogNT::getInstance();
streamType = tstreamType;
if (ac3codec_libav == NULL)
{
- LogNT::getInstance()->debug(TAG, "Find libav ac3 decoder failed");
+ logger->debug(TAG, "Find libav ac3 decoder failed");
return 0;
}
if (mp23codec_libav == NULL)
{
- LogNT::getInstance()->debug(TAG, "Find libav mpeg audio decoder failed");
+ logger->debug(TAG, "Find libav mpeg audio decoder failed");
return 0;
}
if (aaclatmcodec_libav == NULL)
{
- LogNT::getInstance()->debug(TAG, "Find libav aac latm decoder failed");
+ logger->debug(TAG, "Find libav aac latm decoder failed");
return 0;
}
int ret;
- ret = vc_tv_hdmi_audio_supported( EDID_AudioFormat_eMPEG1, 2, EDID_AudioSampleRate_e48KHz, 0);
-
+ ret = vc_tv_hdmi_audio_supported(EDID_AudioFormat_eMPEG1, 2, EDID_AudioSampleRate_e48KHz, 0);
if (ret == 0)
{
- //canpass_mp2=true;
- // not implemented
- LogNT::getInstance()->info(TAG, "TV hdmi supports mpeg1 layer 1 and 2");
+ // canpass_mp2=true; // not implemented
+ logger->info(TAG, "TV hdmi supports mpeg1 layer 1 and 2");
}
- ret = vc_tv_hdmi_audio_supported( EDID_AudioFormat_eMP3, 2, EDID_AudioSampleRate_e48KHz, 0);
-
+ ret = vc_tv_hdmi_audio_supported(EDID_AudioFormat_eMP3, 2, EDID_AudioSampleRate_e48KHz, 0);
if (ret == 0)
{
- //canpass_mp3=true;
- // not implemented
- LogNT::getInstance()->info(TAG, "TV hdmi supports mpeg1 layer 3");
+ // canpass_mp3=true; // not implemented
+ logger->info(TAG, "TV hdmi supports mpeg1 layer 3");
}
- ret = vc_tv_hdmi_audio_supported( EDID_AudioFormat_eAC3, 6, EDID_AudioSampleRate_e48KHz, 0);
-
+ ret = vc_tv_hdmi_audio_supported(EDID_AudioFormat_eAC3, 6, EDID_AudioSampleRate_e48KHz, 0);
if (ret == 0)
{
canpass_ac3 = true;
- LogNT::getInstance()->info(TAG, "TV hdmi supports AC3");
+ logger->info(TAG, "TV hdmi supports AC3");
}
- ret = vc_tv_hdmi_audio_supported( EDID_AudioFormat_eAAC, 6, EDID_AudioSampleRate_e48KHz, 0);
-
+ ret = vc_tv_hdmi_audio_supported(EDID_AudioFormat_eAAC, 6, EDID_AudioSampleRate_e48KHz, 0);
if (ret == 0)
{
- canpass_aac = true;
- //not implemented
- LogNT::getInstance()->info(TAG, "TV hdmi supports AAC");
+ canpass_aac = true; // not implemented ?
+ logger->info(TAG, "TV hdmi supports AAC");
}
canpass_pcm_mch = false;
-
+ initted = 1;
return 1;
}
int AudioOMX::shutdown()
{
if (!initted) return 0;
-
- initted = 0;
-
- LogNT::getInstance()->debug(TAG, "audio shutdown called");
+ logger->debug(TAG, "audio shutdown called");
DeAllocateCodecsOMX();
-
free(decompress_buffer);
decompress_buffer = NULL;
decompress_buffer_size = 0;
decompress_buffer_filled = 0;
-
+ initted = 0;
return 1;
}
bool AudioOMX::loadOptionsFromServer(VDR* vdr)
{
- LogNT::getInstance()->debug(TAG, "AudioOMX config load");
- char* name = vdr->configLoad("AudioOMX", "AC3DecodingMode");
+ logger->debug(TAG, "AudioOMX config load");
- if (name != NULL)
+ char* name = vdr->configLoad("AudioOMX", "AC3DecodingMode");
+ if (name)
{
- 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;
- }
+ 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;
delete[] name;
}
name = vdr->configLoad("AudioOMX", "Mp2DecodingMode");
-
- if (name != NULL)
+ if (name)
{
- 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;
- }
+ 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;
delete[] name;
}
name = vdr->configLoad("AudioOMX", "AACDecodingMode");
-
- if (name != NULL)
+ if (name)
{
- if (STRCASECMP(name, "PCM") == 0)
- {
- prefered_aac = 0;
- }
- else if (STRCASECMP(name, "Passthrough") == 0)
- {
- prefered_aac = 1;
- }
- else if (STRCASECMP(name, "PCMMultichannel") == 0)
- {
- prefered_aac = 2;
- }
+ if (STRCASECMP(name, "PCM") == 0) prefered_aac = 0;
+ else if (STRCASECMP(name, "Passthrough") == 0) prefered_aac = 1;
+ else if (STRCASECMP(name, "PCMMultichannel") == 0) prefered_aac = 2;
delete[] name;
}
name = vdr->configLoad("AudioOMX", "Mp3DecodingMode");
-
- if (name != NULL)
+ if (name)
{
- 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;
- }
+ 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;
delete[] name;
}
name = vdr->configLoad("AudioOMX", "AudioOutput");
-
- if (name != NULL)
+ if (name)
{
- if (STRCASECMP(name, "analog") == 0)
- {
- hdmi = false;
- }
- else if (STRCASECMP(name, "HDMI") == 0)
- {
- hdmi = true;
- }
+ if (STRCASECMP(name, "analog") == 0) hdmi = false;
+ else if (STRCASECMP(name, "HDMI") == 0) hdmi = true;
delete[] name;
}
-
return true;
-
}
bool AudioOMX::handleOptionChanges(Option* option)
{
- if (Audio::handleOptionChanges(option))
- return true;
+ 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;
- }
-
+ 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;
+ 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;
+ return true;
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;
+ 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;
+ return true;
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;
+ 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;
+ return true;
case 5:
- {
- if (STRCASECMP(option->options[option->userSetChoice], "PCM") == 0)
- {
- prefered_aac = 0;
- }
- else if (STRCASECMP(option->options[option->userSetChoice], "Passthrough") == 0)
- {
- prefered_aac = 1;
- }
- else if (STRCASECMP(option->options[option->userSetChoice], "PCMMultichannel") == 0)
- {
- prefered_aac = 2;
- }
- }
- break;
+ if (STRCASECMP(option->options[option->userSetChoice], "PCM") == 0) prefered_aac = 0;
+ else if (STRCASECMP(option->options[option->userSetChoice], "Passthrough") == 0) prefered_aac = 1;
+ else if (STRCASECMP(option->options[option->userSetChoice], "PCMMultichannel") == 0) prefered_aac = 2;
+ return true;
}
return false;
-
}
bool AudioOMX::saveOptionstoServer()
{
-
switch (prefered_ac3)
{
case 0:
else
VDR::getInstance()->configSave("AudioOMX", "AudioOutput", "HDMI");
-
return true;
}
options->push_back(option);
pane->addOptionLine(option);
-
- char** ac3opts = new char* [3];
+ char** ac3opts = new char*[3];
int i = 0;
ac3opts[i] = new char[strlen("PCM") + 1];
strcpy(ac3opts[i], "PCM");
OMX_ERRORTYPE AudioOMX::EmptyBufferDone_OMX(OMX_IN OMX_HANDLETYPE /* hcomp */, OMX_IN OMX_PTR /* appdata */, OMX_IN OMX_BUFFERHEADERTYPE* buffer)
{
- //LogNT::getInstance()->info(TAG, "EmptyBufferDone");
AudioOMX* audio = static_cast<AudioOMX*>(getInstance());
audio->ReturnEmptyOMXBuffer(buffer);
return OMX_ErrorNone;
void AudioOMX::ReturnEmptyOMXBuffer(OMX_BUFFERHEADERTYPE* buffer)
{
input_bufs_omx_mutex.lock();
- //LogNT::getInstance()->info(TAG, "ReturnEmptyOMXBuffer {}",input_bufs_omx_free.size());
input_bufs_omx_free.push_back(buffer);
- //LogNT::getInstance()->info(TAG, "ReturnEmptyOMXBuffer {}",input_bufs_omx_free.size());
input_bufs_omx_mutex.unlock();
VideoOMX* video = static_cast<VideoOMX*>(Video::getInstance());
video->signalOmx();
OMX_ERRORTYPE AudioOMX::FillBufferDone_OMX(OMX_IN OMX_HANDLETYPE /* hcomp */, OMX_IN OMX_PTR /* appdata */, OMX_IN OMX_BUFFERHEADERTYPE* /* buffer */)
{
- LogNT::getInstance()->info(TAG, "FillBufferDone");
VideoOMX* video = static_cast<VideoOMX*>(Video::getInstance());
video->signalOmx();
return OMX_ErrorNone;
}
-int AudioOMX::setStreamType(u1 /* type */)
-{
- if (!initted) return 0;
-
- // if (ioctl(fdAudio, AV_SET_AUD_STREAMTYPE, type) != 0) return 0;
- return 1;
-}
-
-int AudioOMX::setChannel()
-{
- if (!initted) return 0;
-
- // if (ioctl(fdAudio, AV_SET_AUD_CHANNEL, 0) != 0) return 0;
- return 1;
-}
-
-int AudioOMX::setSource()
-{
- if (!initted) return 0;
-
- // if (ioctl(fdAudio, AV_SET_AUD_SRC, 1) != 0) return 0;
- return 1;
-}
-
-int AudioOMX::sync()
-{
- if (!initted) return 0;
-
- // if (ioctl(fdAudio, AV_SET_AUD_SYNC, 2) != 0) return 0;
- return 1;
-}
+int AudioOMX::setStreamType(u1 /* type */) { return 1; }
+int AudioOMX::setChannel() { return 1; }
+int AudioOMX::setSource() { return 1; }
+int AudioOMX::sync() { return 1; }
int AudioOMX::play()
{
if (!initted) return 0;
lastAType = MPTYPE_MPEG_AUDIO;
- LogNT::getInstance()->debug(TAG, "enter play");
+ logger->debug(TAG, "enter play");
static_cast<VideoOMX*>(Video::getInstance())->interlaceSwitch4Demux(); // switch resolution if necessary
- if (!AllocateCodecsOMX())
- {
- return 0;
- }
+ if (!AllocateCodecsOMX()) return 0;
return 1;
}
-int AudioOMX::ChangeAudioDestination() //clock aka omx mutex needs to be locked
+int AudioOMX::ChangeAudioDestination() // clock aka omx mutex needs to be locked
{
OMX_ERRORTYPE error;
const char* destinations[] = {"local", "hdmi"};
auddest.nVersion.nVersion = OMX_VERSION;
strcpy((char*)auddest.sName, destinations[dest]);
- LogNT::getInstance()->debug(TAG, "setting destination to: {}", auddest.sName);
+ logger->debug(TAG, "setting destination to: {}", auddest.sName);
error = OMX_SetConfig(omx_aud_rend, OMX_IndexConfigBrcmAudioDestination, &auddest);
-
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX_IndexConfigBrcmAudioDestination failed {:#x} {:#x} {}", error, omx_aud_rend, auddest.sName);
+ logger->debug(TAG, "Init OMX_IndexConfigBrcmAudioDestination failed {:#x} {:#x} {}", error, omx_aud_rend, auddest.sName);
DeAllocateCodecsOMX();
return 0;
}
{
OMX_ERRORTYPE error;
//Ok first fidle a working configuration
- LogNT::getInstance()->debug(TAG, "ChangeAudioPortConfig");
+ logger->debug(TAG, "ChangeAudioPortConfig");
OMX_AUDIO_CODINGTYPE encoding;
encoding = OMX_AUDIO_CodingPCM;
}
}
+ break;
}
- break;
case MPTYPE_AAC_LATM:
{
}
else
{
- LogNT::getInstance()->debug(TAG, "ChangeAudioPortConfig debug {} {}", prefered_aac, canpass_aac);
+ logger->debug(TAG, "ChangeAudioPortConfig debug {} {}", prefered_aac, canpass_aac);
if (prefered_aac == 1 && canpass_aac)
{
encoding = OMX_AUDIO_CodingPCM;
}
}
+ break;
}
- break;
case MPTYPE_AC3_PRE13:
case MPTYPE_AC3:
}
else
{
- LogNT::getInstance()->debug(TAG, "ChangeAudioPortConfig debug {} {}", prefered_ac3, canpass_ac3);
+ logger->debug(TAG, "ChangeAudioPortConfig debug {} {}", prefered_ac3, canpass_ac3);
if (prefered_ac3 == 1 && canpass_ac3)
{
encoding = OMX_AUDIO_CodingPCM;
}
}
+ break;
}
- break;
case MPTYPE_MPEG_AUDIO_LAYER3:
{
encoding = OMX_AUDIO_CodingPCM;
}
}
+ break;
}
- break;
- };
+ }
}
else
{
}
-
/*OMX_CONFIG_BOOLEANTYPE booly;
memset(&booly, 0, sizeof(booly));
booly.nSize = sizeof(booly);
error = OMX_SetParameter(omx_aud_dec, OMX_IndexParamBrcmDecoderPassThrough,
&booly);
if (error != OMX_ErrorNone) {
- LogNT::getInstance()->debug(TAG,
+ logger->debug(TAG,
"Init OMX_IndexParamBrcmDecoderPassThrough failed {:#x}", error);
DeAllocateCodecsOMX();
return 0;
//video->CommandFinished(omx_aud_rend,OMX_CommandPortDisable,omx_rend_input_port);
}
-
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);
-
+ error = OMX_GetParameter(omx_aud_rend, OMX_IndexParamAudioPortFormat, &format);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Get OMX_IndexParamAudioPortFormat failed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Get OMX_IndexParamAudioPortFormat failed {:#x} {}", error, omx_rend_input_port);
return 0;
}
- if (disport)
-
- LogNT::getInstance()->debug(TAG, "Get OMX_IndexParamAudioPortFormat returned {}", format.eEncoding );
+ if (disport) logger->debug(TAG, "Get OMX_IndexParamAudioPortFormat returned {}", format.eEncoding);
format.eEncoding = encoding;
error = OMX_SetParameter(omx_aud_rend, OMX_IndexParamAudioPortFormat, &format);
-
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Set OMX_IndexParamAudioPortFormat failed {:#x} {} {}", error, omx_rend_input_port, format.eEncoding);
+ logger->debug(TAG, "Set OMX_IndexParamAudioPortFormat failed {:#x} {} {}", error, omx_rend_input_port, format.eEncoding);
//return 0;
}
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX_IndexParamAudioPcm failed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Init OMX_IndexParamAudioPcm failed {:#x} {}", error, omx_rend_input_port);
return 0;
}
+ break;
}
- break;
case OMX_AUDIO_CodingDDP:
{
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG,
+ logger->debug(TAG,
"Init OMX_IndexParamAudioDdp failed {:#x} {}", error,
omx_rend_input_port);
return 0;
}
+ break;
}
- break;
default: break; //Make compiler happy
};
if (disport)
{
-
//PrepareInputBufsOMX(false);
video->EnablePort(omx_aud_rend, omx_rend_input_port, false);
}
if (!ac3codec_context_libav)
{
- LogNT::getInstance()->debug(TAG, "Alloc avcodec for ac3 decoding context failed!");
+ logger->debug(TAG, "Alloc avcodec for ac3 decoding context failed!");
return 0;
}
if (avc_ret < 0)
{
- LogNT::getInstance()->debug(TAG, "Opening libav codec failed");
+ logger->debug(TAG, "Opening libav codec failed");
libav_mutex.unlock();
return 0;
}
if (!aaclatmcodec_context_libav)
{
- LogNT::getInstance()->debug(TAG, "Alloc avcodec for aac decoding context failed!");
+ logger->debug(TAG, "Alloc avcodec for aac decoding context failed!");
return 0;
}
if (avc_ret < 0)
{
- LogNT::getInstance()->debug(TAG, "Opening libav codec failed");
+ logger->debug(TAG, "Opening libav codec failed");
libav_mutex.unlock();
return 0;
}
if (!ac3codec_context_libav)
{
- LogNT::getInstance()->debug(TAG, "Alloc avcodec for mp23 decoding context failed!");
+ logger->debug(TAG, "Alloc avcodec for mp23 decoding context failed!");
libav_mutex.unlock();
return 0;
}
if (avc_ret < 0)
{
- LogNT::getInstance()->debug(TAG, "Opening libav codec failed");
+ logger->debug(TAG, "Opening libav codec failed");
libav_mutex.unlock();
return 0;
}
if (resam_con_libav == NULL)
{
- LogNT::getInstance()->debug(TAG, "Alloc resample context failed");
+ logger->debug(TAG, "Alloc resample context failed");
return 0;
}
OMX_ERRORTYPE error;
static OMX_CALLBACKTYPE callbacks = {&VideoOMX::EventHandler_OMX, &EmptyBufferDone_OMX, &FillBufferDone_OMX};
- LogNT::getInstance()->info(TAG, "Allocate Codecs OMX");
+ logger->info(TAG, "Allocate Codecs OMX");
//Clock, move later to audio
VideoOMX* video = static_cast<VideoOMX*>(Video::getInstance());
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX audio rend failed {:#x}", error);
+ logger->debug(TAG, "Init OMX audio rend failed {:#x}", error);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX audio rend OMX_GetParameter failed {:#x}", error);
+ logger->debug(TAG, "Init OMX audio rend OMX_GetParameter failed {:#x}", error);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX aud rend OMX_GetParameter failed {:#x}", error);
+ logger->debug(TAG, "Init OMX aud rend OMX_GetParameter failed {:#x}", error);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
// buggy return value
omx_rend_clock_port = p_param.nStartPortNumber;
-
-
- /* error=OMX_GetHandle(&omx_aud_dec,VPE_OMX_AUDIO_DECODER,NULL,&callbacks);
-
- if (error!=OMX_ErrorNone){
- LogNT::getInstance()->debug(TAG, "Init OMX audio decoder failed {:#x}", error);
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }
-
- error=OMX_GetParameter(omx_aud_dec,OMX_IndexParamAudioInit,&p_param);
- if (error!=OMX_ErrorNone){
- LogNT::getInstance()->debug(TAG, "Init OMX audio decoder OMX_GetParameter failed {:#x}", error);
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }
- omx_codec_input_port=p_param.nStartPortNumber;
- omx_codec_output_port=p_param.nStartPortNumber+1;
-
- if (!video->DisablePort(omx_aud_dec,omx_codec_input_port) || !video->DisablePort(omx_aud_dec,omx_codec_output_port)) {
- LogNT::getInstance()->debug(TAG, "Disable Ports OMX audio decoder failed");
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }*/
-
-
- if (!video->DisablePort(omx_aud_rend, omx_rend_input_port, true) )
+ if (!video->DisablePort(omx_aud_rend, omx_rend_input_port, true))
{
- LogNT::getInstance()->debug(TAG, "Disable Ports OMX audio rend failed {}", omx_rend_input_port);
+ logger->debug(TAG, "Disable Ports OMX audio rend failed {}", omx_rend_input_port);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
}
- if ( !video->DisablePort(omx_aud_rend, omx_rend_clock_port, true))
+ if (!video->DisablePort(omx_aud_rend, omx_rend_clock_port, true))
{
- LogNT::getInstance()->debug(TAG,
- "Disable Ports OMX rend clock port failed {}", omx_rend_clock_port);
+ logger->debug(TAG, "Disable Ports OMX rend clock port failed {}", omx_rend_clock_port);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
}
-
// Setup chain
error = OMX_SetupTunnel(omx_clock, omx_clock_output_port, omx_aud_rend, omx_rend_clock_port);
-
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel clock to rend failed {:#x} {} {}", error, omx_clock_output_port, omx_rend_clock_port);
+ logger->debug(TAG, "OMX_Setup tunnel clock to rend failed {:#x} {} {}", error, omx_clock_output_port, omx_rend_clock_port);
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (!video->EnablePort(omx_clock, omx_clock_output_port, false) || !video->EnablePort(omx_aud_rend, omx_rend_clock_port, false))
{
- LogNT::getInstance()->debug(TAG, "Enable Ports OMX clock rend failed");
+ logger->debug(TAG, "Enable Ports OMX clock rend failed");
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (!video->ChangeComponentState(omx_aud_rend, OMX_StateIdle))
{
- LogNT::getInstance()->debug(TAG, "aud_rend idle ChangeComponentState");
+ logger->debug(TAG, "aud_rend idle ChangeComponentState");
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (!ChangeAudioPortConfig(false))
{
- LogNT::getInstance()->info(TAG, "Change AudioPortConfig failed");
+ logger->info(TAG, "Change AudioPortConfig failed");
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
}
- /* if (!video->ChangeComponentState(omx_aud_dec,OMX_StateIdle)) {
- LogNT::getInstance()->debug(TAG, "aud_dec ChangeComponentState");
- DeAllocateCodecsOMX();
- return 0;
- }*/
-
if (!PrepareInputBufsOMX(true))
{
video->UnlockClock();
return 0;
}
- /* error=OMX_SetupTunnel(omx_aud_dec,omx_codec_output_port,omx_aud_rend,omx_rend_input_port);
- if (error!=OMX_ErrorNone){
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel dec to render failed {:#x}", error);
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }*/
-
- /* if (!video->EnablePort(omx_aud_dec,omx_codec_output_port,false) || !video->EnablePort(omx_aud_rend,omx_rend_input_port,false)
- ) {
- LogNT::getInstance()->debug(TAG, "Enable Ports OMX codec rend failed");
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }*/
-
- /* if ( !video->CommandFinished(omx_aud_dec,OMX_CommandPortEnable,omx_codec_output_port)
- || !video->CommandFinished(omx_aud_rend,OMX_CommandPortEnable,omx_rend_input_port)) {
- video->UnlockClock();
- DeAllocateCodecsOMX();
- return 0;
- }*/
-
if (!video->ChangeComponentState(omx_aud_rend, OMX_StateExecuting))
{
- LogNT::getInstance()->debug(TAG, "omx_aud_rend ChangeComponentState Execute");
+ logger->debug(TAG, "omx_aud_rend ChangeComponentState Execute");
video->UnlockClock();
DeAllocateCodecsOMX();
return 0;
if (!video->setClockExecutingandRunning()) return 0;
- LogNT::getInstance()->info(TAG, "Allocate Codecs OMX finished");
+ logger->info(TAG, "Allocate Codecs OMX finished");
return 1;
}
-int AudioOMX::PrepareInputBufsOMX(bool setportdef) //needs to be called with locvke omx clock mutex
+int AudioOMX::PrepareInputBufsOMX(bool setportdef) //needs to be called with locked omx clock mutex
{
VideoOMX* video = static_cast<VideoOMX*>(Video::getInstance());
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Get OMX OMX_IndexParamPortDefinition failed {:#x}", error);
+ logger->debug(TAG, "Get OMX OMX_IndexParamPortDefinition failed {:#x}", error);
}
if (setportdef)
error = OMX_SetParameter(omx_aud_rend/*dec*/, OMX_IndexParamPortDefinition, &port_def_type);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Set OMX OMX_IndexParamPortDefinition failed {:#x}", error);
+ logger->debug(TAG, "Set OMX OMX_IndexParamPortDefinition failed {:#x}", error);
}
}
error = OMX_SendCommand(omx_aud_rend/*dec*/, OMX_CommandPortEnable, omx_rend_input_port/*codec*/, 0);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Prepare Input bufs Send Command to enable port {:#x}", error);
+ logger->debug(TAG, "Prepare Input bufs Send Command to enable port {:#x}", error);
return 0;
}
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Use OMX_AllocateBuffer failed {:#x}", error);
+ logger->debug(TAG, "Use OMX_AllocateBuffer failed {:#x}", error);
input_bufs_omx_mutex.unlock();
return 0;
}
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Use OMX_FreeBuffer failed {:#x}", error);
+ logger->debug(TAG, "Use OMX_FreeBuffer failed {:#x}", error);
input_bufs_omx_mutex.unlock();
return 0;
}
int AudioOMX::DestroyInputBufsOMXwhilePlaying() //call with clock mutex locked
{
- //OMX_ERRORTYPE error;
-
cur_input_buf_omx = NULL;
input_bufs_omx_mutex.lock();
}
}
- LogNT::getInstance()->debug(TAG, "DestroyInputBufsOMXwhilePlaying {} {}", input_bufs_omx_all.size(), input_bufs_omx_free.size());
+ logger->debug(TAG, "DestroyInputBufsOMXwhilePlaying {} {}", input_bufs_omx_all.size(), input_bufs_omx_free.size());
input_bufs_omx_mutex.unlock();
return 1;
}
OMX_ERRORTYPE error;
omx_running = false;
VideoOMX* video = static_cast<VideoOMX*>(Video::getInstance());
- LogNT::getInstance()->debug(TAG, "enter deallocatecodecsomx");
+ logger->debug(TAG, "enter deallocatecodecsomx");
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 1");
+ logger->debug(TAG, "deallocatecodecsomx mark 1");
if (cur_input_buf_omx)
{
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 6 failed {:#x}", error);
+ logger->debug(TAG, "OMX_EmptyThisBuffer 6 failed {:#x}", error);
}
cur_input_buf_omx = NULL; //write out old data
}
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 2");
+ logger->debug(TAG, "deallocatecodecsomx mark 2");
video->LockClock();
{
// first stop the omx elements
/* if (!video->ChangeComponentState(omx_aud_dec,OMX_StateIdle)) {
- LogNT::getInstance()->debug(TAG, "aud_dec ChangeComponentState");
+ logger->debug(TAG, "aud_dec ChangeComponentState");
}*/
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 3");
+ logger->debug(TAG, "deallocatecodecsomx mark 3");
video->UnlockClock();
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 4");
+ logger->debug(TAG, "deallocatecodecsomx mark 4");
video->idleClock();
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 5");
+ logger->debug(TAG, "deallocatecodecsomx mark 5");
video->LockClock();
if (!video->ChangeComponentState(omx_aud_rend, OMX_StateIdle))
{
- LogNT::getInstance()->debug(TAG, "aud_rend ChangeComponentState");
+ logger->debug(TAG, "aud_rend ChangeComponentState");
}
// TODO proper deinit sequence
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Flush rend in failed {:#x}", error);
+ logger->debug(TAG, "OMX_Flush rend in failed {:#x}", error);
}
- /* error=OMX_SendCommand(omx_aud_dec,OMX_CommandFlush, omx_codec_input_port, NULL);
- if (error!=OMX_ErrorNone){
- LogNT::getInstance()->debug(TAG, "OMX_Flush codec out failed {:#x}", error);
-
- }*/
-
-
- /* if (!video->CommandFinished(omx_aud_dec,OMX_CommandFlush,omx_codec_input_port)) {
- LogNT::getInstance()->debug(TAG, "flush cmd codec input failed");
- }*/
-
-
-
error = OMX_SendCommand(omx_clock, OMX_CommandFlush, omx_clock_output_port, NULL);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Flush clock out failed {:#x}", error);
+ logger->debug(TAG, "OMX_Flush clock out failed {:#x}", error);
}
error = OMX_SendCommand(omx_aud_rend, OMX_CommandFlush, omx_rend_clock_port, NULL);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Flush rend clock failed {:#x}", error);
+ logger->debug(TAG, "OMX_Flush rend clock failed {:#x}", error);
}
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 6");
+ logger->debug(TAG, "deallocatecodecsomx mark 6");
if (!video->CommandFinished(omx_clock, OMX_CommandFlush, omx_clock_output_port) ||
!video->CommandFinished(omx_aud_rend, OMX_CommandFlush, omx_rend_clock_port))
{
- LogNT::getInstance()->debug(TAG, "flush cmd clock shed failed");
+ logger->debug(TAG, "flush cmd clock shed failed");
}
DestroyInputBufsOMX(); //We have to make sure that no buffers are in use
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 6a");
+ logger->debug(TAG, "deallocatecodecsomx mark 6a");
DeinitDecoderLibAV();
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 7");
+ logger->debug(TAG, "deallocatecodecsomx mark 7");
//todo flushing
if (!video->DisablePort(omx_aud_rend, omx_rend_input_port, true))
{
- LogNT::getInstance()->debug(TAG, "Disable Tunnel Port failed 1");
+ logger->debug(TAG, "Disable Tunnel Port failed 1");
}
- /* if (!video->DisablePort(omx_aud_dec,omx_codec_output_port,true)) {
- LogNT::getInstance()->debug(TAG, "Disable Tunnel Port failed 6");
- }
-
- if (!video->DisablePort(omx_aud_dec,omx_codec_input_port,true)) {
- LogNT::getInstance()->debug(TAG, "Disable Tunnel Port failed 7");
- }*/
-
-
if (!video->DisablePort(omx_aud_rend, omx_rend_clock_port, true))
{
- LogNT::getInstance()->debug(TAG, "Disable Tunnel Port failed 4");
+ logger->debug(TAG, "Disable Tunnel Port failed 4");
}
if (!video->DisablePort(omx_clock, omx_clock_output_port, true))
{
- LogNT::getInstance()->debug(TAG, "Disable Tunnel Port failed 5");
+ logger->debug(TAG, "Disable Tunnel Port failed 5");
}
- /* error=OMX_SetupTunnel(omx_aud_dec,omx_codec_output_port,NULL,NULL);
- if (error!=OMX_ErrorNone) {
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
- }*/
-
error = OMX_SetupTunnel(omx_aud_rend, omx_rend_input_port, NULL, 0);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
+ logger->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
}
error = OMX_SetupTunnel(omx_clock, omx_clock_output_port, NULL, 0);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
+ logger->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
}
error = OMX_SetupTunnel(omx_aud_rend, omx_rend_clock_port, NULL, 0);
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
+ logger->debug(TAG, "OMX_Setup tunnel teardown failed {:#x}", error);
}
- LogNT::getInstance()->debug(TAG, "deallocatecodecsomx mark 8");
+ logger->debug(TAG, "deallocatecodecsomx mark 8");
- //error=OMX_FreeHandle(omx_aud_dec);
error = OMX_FreeHandle(omx_aud_rend);
video->UnlockClock();
video->destroyClock();
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "FreeHandle failed {}", error);
+ logger->debug(TAG, "FreeHandle failed {}", error);
}
}
else
DeinitDecoderLibAV();
}
- LogNT::getInstance()->debug(TAG, "leave deallocate codecs OMX");
+ logger->debug(TAG, "leave deallocate codecs OMX");
return 1;
}
{
if (!initted) return 0;
- LogNT::getInstance()->debug(TAG, "Audio stop called");
+ logger->debug(TAG, "Audio stop called");
DeAllocateCodecsOMX();
- //if (ioctl(fdAudio, AV_SET_AUD_RESET, 0x11) != 0) return 0;
return 1;
}
{
if (!initted) return 0;
- LogNT::getInstance()->debug(TAG, "MUTE MUTE MUTE");
+ logger->debug(TAG, "MUTE MUTE MUTE");
VideoOMX* vw = static_cast<VideoOMX*>(Video::getInstance());
vw->LockClock();
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)
{
- LogNT::getInstance()->debug(TAG,
- "Set OMX_IndexConfigAudioMute failed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Set OMX_IndexConfigAudioMute failed {:#x} {}", error, omx_rend_input_port);
vw->UnlockClock();
return 0;
}
{
if (!initted) return 0;
- LogNT::getInstance()->debug(TAG, "MUTE OFF OFF OFF");
+ logger->debug(TAG, "MUTE OFF OFF OFF");
VideoOMX* vw = static_cast<VideoOMX*>(Video::getInstance());
vw->LockClock();
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Set OMX_IndexConfigAudioMute failed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Set OMX_IndexConfigAudioMute failed {:#x} {}", error, omx_rend_input_port);
vw->UnlockClock();
return 0;
}
{
if (!initted) return 0;
- LogNT::getInstance()->debug(TAG, "reset called");
+ logger->debug(TAG, "reset called");
DeAllocateCodecsOMX();
- // if (ioctl(fdAudio, AV_SET_AUD_RESET, 0x11) != 0) return 0;
- // LogNT::getInstance()->debug(TAG, "reset back");
- // if (ioctl(fdAudio, AV_SET_AUD_PLAY, 0) != 0) return 0;
-
doMuting();
return 1;
}
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Set OMX_IndexConfigAudioVolume failed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Set OMX_IndexConfigAudioVolume failed {:#x} {}", error, omx_rend_input_port);
vw->UnlockClock();
return 0;
}
//sanity check inspired by libav
-
const int sample_rates[4] = {44100, 48000, 32000, 0};
const short bitrate_tab[2][3][15] = { { {
0, 32, 64, 96, 128, 160,
int mpeg2 = 0;
int layer = 4 - ((data[atest + 1] & 0x06) >> 1);
- if (layer == 4) {atest++; continue;} //sanity check
+ if (layer == 4) { atest++; continue; } //sanity check
int bitrate_index = (data[atest + 2] & 0xf0) >> 4;
- if (bitrate_index == 0x0f || bitrate_index == 0x0) {atest++; continue;} //sanity check
+ if (bitrate_index == 0x0f || bitrate_index == 0x0) { atest++; continue; } //sanity check
int samplerate_index = (data[atest + 2] & 0x0C) >> 2;
mp3sameheader = sameheadertest;
- //LogNT::getInstance()->debug(TAG, "FRAME: {} {} {} {} {} {} {}",lsf,layer,bitrate_index,sample_rate,padding,temp_frame_size, frame_size);
- //LogNT::getInstance()->debug(TAG, "FRAME DIAG: {:#x} {:#x} {:#x} {}",data[atest],data[atest+1],data[atest+2],mp3sameheadercount);
+ //logger->debug(TAG, "FRAME: {} {} {} {} {} {} {}",lsf,layer,bitrate_index,sample_rate,padding,temp_frame_size, frame_size);
+ //logger->debug(TAG, "FRAME DIAG: {:#x} {:#x} {:#x} {}",data[atest],data[atest+1],data[atest+2],mp3sameheadercount);
if (mp3sameheadercount > 4)
{
unsigned char fscod = (code & 0xC0) >> 6;
unsigned char frmsize = (code & 0x3f);
- if (fscod != 0) LogNT::getInstance()->debug(TAG, "warning we only support 48 KHz sampling rate");
+ if (fscod != 0) logger->debug(TAG, "warning we only support 48 KHz sampling rate");
*framesize = frm_size_tab[frmsize] * 2;
return atest; // probably FrameSync
audio_lat.nVersion.nVersion = OMX_VERSION;
audio_lat.nPortIndex = omx_rend_input_port;
- error = OMX_GetConfig(omx_aud_rend, OMX_IndexConfigAudioRenderingLatency,
- &audio_lat);
+ error = OMX_GetConfig(omx_aud_rend, OMX_IndexConfigAudioRenderingLatency, &audio_lat);
video->UnlockClock();
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "Init OMX_IndexConfigAudioRenderingLatencyfailed {:#x} {}", error, omx_rend_input_port);
+ logger->debug(TAG, "Init OMX_IndexConfigAudioRenderingLatencyfailed {:#x} {}", error, omx_rend_input_port);
return pts; // no correction in case of error
}
- /*LogNT::getInstance()->debug(TAG, "Current audio latency {}",
- audio_lat.nU32);*/
+ // logger->debug(TAG, "Current audio latency {}", audio_lat.nU32);
long long workpts = 0;
workpts += addsamples;
bool achange = false;
OMX_ERRORTYPE error;
- //Log *logger=Log::getInstance();
if (vw->InIframemode())
{
samplepos = 0;
if (vw->isClockPaused()) return 0; //Block if we pause
- //LogNT::getInstance()->debug(TAG, "DMP mark 1");
+ //logger->debug(TAG, "DMP mark 1");
- //LogNT::getInstance()->debug(TAG, "DeliverMediaPacketOMX time {}",mpacket.presentation_time);
+ //logger->debug(TAG, "DeliverMediaPacketOMX time {}",mpacket.presentation_time);
/* if (mpacket.synched && mpacket.presentation_time <= 0) {
*samplepos = mpacket.length;
firstsynched = false;
lsync=true;
- LogNT::getInstance()->debug(TAG,
+ logger->debug(TAG,
"DeliverMediaPacketOMX Frameskip");
return mpacket.length;
}*/
- //LogNT::getInstance()->debug(TAG, "DMP mark 2");
+ //logger->debug(TAG, "DMP mark 2");
u4 headerstrip = 0;
if (cur_input_buf_omx)
{
error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
-
- if (error != OMX_ErrorNone)
- {
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 1 failed {:#x}", error);
- }
+ if (error != OMX_ErrorNone) logger->debug(TAG, "OMX_EmptyThisBuffer 1 failed {:#x}", error);
cur_input_buf_omx = NULL;
}
lsync = true;
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 3");
+ //logger->debug(TAG, "DMP mark 3");
if (mpacket.type != lastAType) //Format Change //Push data out !
{
firstsynched = false;
achange = true;
mp3sameheader = 0;
- LogNT::getInstance()->debug(TAG, "Notice audio type change {} {}", mpacket.type, lastAType);
+ logger->debug(TAG, "Notice audio type change {} {}", mpacket.type, lastAType);
lastAType = mpacket.type;
decompress_buffer_filled = 0;
if (cur_input_buf_omx)
{
- error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/,
- cur_input_buf_omx);
-
- if (error != OMX_ErrorNone)
- {
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 2 failed {:#x}", error);
- }
+ error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
+ if (error != OMX_ErrorNone) logger->debug(TAG, "OMX_EmptyThisBuffer 2 failed {:#x}", error);
cur_input_buf_omx = NULL;
}
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
vw->LockClock();
- if (!ChangeAudioPortConfig(true))
- {
- LogNT::getInstance()->debug(TAG, "Changing audio port config failed", error);
- }
+ if (!ChangeAudioPortConfig(true)) logger->debug(TAG, "Changing audio port config failed", error);
vw->UnlockClock();
pthread_setcancelstate(oldcancelstate, NULL);
lsync = true;
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 4");
+ //logger->debug(TAG, "DMP mark 4");
/*Inspect PES-Header */
if (*samplepos == 0 && mpacket.type != MPTYPE_MPEG_AUDIO_LAYER3) //stripheader
if (error != OMX_ErrorNone)
{
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 3 failed {:#x}", error);
+ logger->debug(TAG, "OMX_EmptyThisBuffer 3 failed {:#x}", error);
}
//vw->AdjustAudioPTS(correctAudioLatency(lastreftimeOMX,cur_input_buf_omx->nFilledLen/(2*2),48000));
}
else
{
- if (!firstsynched) //
+ if (!firstsynched)
{
*samplepos = mpacket.length;//if we have not processed at least one
decompress_buffer_filled = 0;
- //LogNT::getInstance()->debug(TAG, "DMP mark 5");
+ //logger->debug(TAG, "DMP mark 5");
return mpacket.length;//synched packet ignore it!
}
}
if (input_bufs_omx_free.size() == 0)
{
input_bufs_omx_mutex.unlock();
- //LogNT::getInstance()->debug(TAG, "DMP mark 6");
- //LogNT::getInstance()->debug(TAG, "Deliver MediaPacket no free sample");
+ //logger->debug(TAG, "DMP mark 6");
+ //logger->debug(TAG, "Deliver MediaPacket no free sample");
return 0; // we do not have a free media sample
}
input_bufs_omx_mutex.unlock();
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 7");
+ //logger->debug(TAG, "DMP mark 7");
if (cur_input_buf_omx->nFilledLen == 0) //will only be changed on first packet
{
if (mpacket.synched)
{
- //LogNT::getInstance()->debug(TAG,
- // "packet synched marker");
+ //logger->debug(TAG, "packet synched marker");
- //lastreftimePTS=mpacket.pts;
+ // lastreftimePTS = mpacket.pts;
if (omx_first_frame) // TODO time
{
cur_input_buf_omx->nFlags = OMX_BUFFERFLAG_STARTTIME;
- LogNT::getInstance()->debug(TAG, "Starttime");
+ logger->debug(TAG, "Starttime");
omx_first_frame = false;
}
else
}
lastreftimeOMX = mpacket.presentation_time;
- //LogNT::getInstance()->debug(TAG,
- // "Time code {} pts {} dts {}", lastreftimeOMX, mpacket.pts,mpacket.dts);
+ // logger->debug(TAG, "Time code {} pts {} dts {}", lastreftimeOMX, mpacket.pts,mpacket.dts);
lastreftimePTS = mpacket.pts;
cur_input_buf_omx->nTimeStamp = VideoOMX::intToOMXTicks(lastreftimeOMX / 10LL); // the clock component is faulty;
}
else
{
- // LogNT::getInstance()->debug(TAG,
- // "packet NOT synched marker");
+ // logger->debug(TAG, "packet NOT synched marker");
cur_input_buf_omx->nFlags = OMX_BUFFERFLAG_TIME_UNKNOWN;
cur_input_buf_omx->nTimeStamp = VideoOMX::intToOMXTicks(0);
}
}
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 8");
+ //logger->debug(TAG, "DMP mark 8");
if (*samplepos > mpacket.length) *samplepos = 0; //propably the thread got interrupted and sample is not valid any more!
{
while (haveToCopy > 0)
{
- //LogNT::getInstance()->debug(TAG, "DMP mark 9");
+ //logger->debug(TAG, "DMP mark 9");
if (lsync)
{
unsigned int gotframesize = 0;
{
case MPTYPE_MPEG_AUDIO:
case MPTYPE_MPEG_AUDIO_LAYER3:
- {
adv = AdvanceMpAudioSync(buffer + mpacket.pos_buffer + *samplepos, haveToCopy, &gotframesize);
- }
- break;
+ break;
case MPTYPE_AC3:
case MPTYPE_AC3_PRE13:
- {
adv = AdvanceAc3AudioSync(buffer + mpacket.pos_buffer + *samplepos, haveToCopy, &gotframesize);
- }
- break;
+ break;
case MPTYPE_AAC_LATM:
- {
adv = AdvanceAacLatmAudioSync(buffer + mpacket.pos_buffer + *samplepos, haveToCopy, &gotframesize);
- }
- break;
+ break;
}
if (adv != (int)haveToCopy)
else
{
*samplepos = mpacket.length; //no ac3 sync byte
- //LogNT::getInstance()->debug(TAG, "DMP mark 10");
+ //logger->debug(TAG, "DMP mark 10");
return mpacket.length;
}
}
haveToCopy -= cancopy;
cur_input_buf_omx->nFilledLen += cancopy;
*samplepos += cancopy;
- //LogNT::getInstance()->debug(TAG, "DMP mark 11");
+ //logger->debug(TAG, "DMP mark 11");
error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
-
- if (error != OMX_ErrorNone)
- {
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 5 failed {:#x}", error);
- }
+ if (error != OMX_ErrorNone) logger->debug(TAG, "OMX_EmptyThisBuffer 5 failed {:#x}", error);
cur_input_buf_omx = NULL;
if (input_bufs_omx_free.size() == 0)
{
input_bufs_omx_mutex.unlock();
- // LogNT::getInstance()->debug(TAG, "Deliver MediaPacket no free sample2");
+ // logger->debug(TAG, "Deliver MediaPacket no free sample2");
return *samplepos; // we do not have a free media sample
}
input_bufs_omx_free.pop_front();
input_bufs_omx_mutex.unlock();
}
-
- //LogNT::getInstance()->debug(TAG, "DMP mark 12");
-
+ //logger->debug(TAG, "DMP mark 12");
}
-
- //LogNT::getInstance()->debug(TAG, "DMP mark 13");
-
+ //logger->debug(TAG, "DMP mark 13");
}
else
{
{
case MPTYPE_MPEG_AUDIO:
case MPTYPE_MPEG_AUDIO_LAYER3:
- {
current_context = mp23codec_context_libav;
-
if (current_context->frame_size < 0) framesize = 1152; //Maximum framesize
else framesize = current_context->frame_size;
- } break;
+ break;
case MPTYPE_AAC_LATM:
- {
current_context = aaclatmcodec_context_libav;
- } break;
+ break;
case MPTYPE_AC3:
case MPTYPE_AC3_PRE13:
- {
current_context = ac3codec_context_libav;
- } break;
+ break;
}
if (decompress_buffer_filled) // have a remaining paket
{
incoming_paket_libav.data = (uint8_t*) decompress_buffer;
- memcpy(decompress_buffer + decompress_buffer_filled,
- buffer + mpacket.pos_buffer + *samplepos,
+ memcpy(decompress_buffer + decompress_buffer_filled, buffer + mpacket.pos_buffer + *samplepos,
std::min(haveToCopy, decompress_buffer_size - decompress_buffer_filled));
incoming_paket_libav.size = decompress_buffer_filled
+ std::min(haveToCopy, decompress_buffer_size - decompress_buffer_filled);
- //LogNT::getInstance()->debug(TAG,"Use saved audio buffer {} {} {}",mpacket.type,decompress_buffer_filled,mpacket.synched);
+ //logger->debug(TAG,"Use saved audio buffer {} {} {}",mpacket.type,decompress_buffer_filled,mpacket.synched);
}
else
{
incoming_paket_libav.size = haveToCopy;
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 18");
+ //logger->debug(TAG, "DMP mark 18");
while (haveToCopy > 0 && errcount < 3)
{
- //LogNT::getInstance()->debug(TAG,"libav in {} {}",framesize,current_context->frame_size);
- //LogNT::getInstance()->debug(TAG, "libav in {} {}",
+ //logger->debug(TAG,"libav in {} {}",framesize,current_context->frame_size);
+ //logger->debug(TAG, "libav in {} {}",
// framesize, current_context->frame_size);
bool donotdecompress = false;
{
case MPTYPE_MPEG_AUDIO:
case MPTYPE_MPEG_AUDIO_LAYER3:
- {
- adv = AdvanceMpAudioSync(incoming_paket_libav.data,
- incoming_paket_libav.size, &gotframesize);
- }
- break;
+ adv = AdvanceMpAudioSync(incoming_paket_libav.data, incoming_paket_libav.size, &gotframesize);
+ break;
case MPTYPE_AC3:
case MPTYPE_AC3_PRE13:
- {
- adv = AdvanceAc3AudioSync(incoming_paket_libav.data,
- incoming_paket_libav.size, &gotframesize);
- }
- break;
+ adv = AdvanceAc3AudioSync(incoming_paket_libav.data, incoming_paket_libav.size, &gotframesize);
+ break;
case MPTYPE_AAC_LATM:
- {
- adv = AdvanceAacLatmAudioSync(incoming_paket_libav.data,
- incoming_paket_libav.size, &gotframesize);
- }
- break;
+ adv = AdvanceAacLatmAudioSync(incoming_paket_libav.data, incoming_paket_libav.size, &gotframesize);
+ break;
}
if (adv > 0 /*&& !decompress_buffer_filled*/)
/*if (current_context->frame_size>0) framesize=min(current_context->frame_size,haveToCopy);
else*/ framesize = haveToCopy;
- //LogNT::getInstance()->debug(TAG,"Advance by {} {} from {}",adv,mpacket.type,*samplepos );
+ //logger->debug(TAG,"Advance by {} {} from {}",adv,mpacket.type,*samplepos );
if (haveToCopy <= 0)
{
- // LogNT::getInstance()->debug(TAG,"No sync code in packet remove {}",mpacket.type);
+ // logger->debug(TAG,"No sync code in packet remove {}",mpacket.type);
*samplepos = mpacket.length;
return mpacket.length;
}
errcount = 100; // exit loop
}
- // else LogNT::getInstance()->debug(TAG,"Loop run");
+ // else logger->debug(TAG,"Loop run");
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 19");
+ //logger->debug(TAG, "DMP mark 19");
if (!donotdecompress)
{
int oldcancelstate;
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
libav_mutex.lock();
- if (!omx_running || !mp23codec_context_libav
- || !ac3codec_context_libav)
+ if (!omx_running || !mp23codec_context_libav || !ac3codec_context_libav)
{
libav_mutex.unlock();
return *samplepos;
}
libav_mutex.unlock();
- // LogNT::getInstance()->debug(TAG,"libav out");
+ // logger->debug(TAG,"libav out");
int save_size = incoming_paket_libav.size;
if ((int)gotframesize <= incoming_paket_libav.size)
// definitely bad code.
// This all needs reworking to handle this properly.
// Leaving DO_NOT_USE in the code in case we have to switch to it
- len = avcodec_decode_audio4(current_context, decode_frame_libav,
- &gotta, &incoming_paket_libav);
+ len = avcodec_decode_audio4(current_context, decode_frame_libav, &gotta, &incoming_paket_libav);
//len = DO_NOT_USE(current_context, decode_frame_libav,
// &gotta, &incoming_paket_libav);
}
else
{
- //LogNT::getInstance()->debug(TAG, "FRAME:E {} {}",gotframesize,incoming_paket_libav.size);
+ //logger->debug(TAG, "FRAME:E {} {}",gotframesize,incoming_paket_libav.size);
gotta = 0;
len = 0;
}
- //LogNT::getInstance()->debug(TAG, "FRAME:T {}",len);
+ //logger->debug(TAG, "FRAME:T {}",len);
incoming_paket_libav.size = save_size;
- //LogNT::getInstance()->debug(TAG, "libav out1");
+ //logger->debug(TAG, "libav out1");
pthread_setcancelstate(oldcancelstate, NULL);
pthread_setcanceltype(oldcanceltype, NULL);
pthread_testcancel();
-
}
else
{
len = 0;
}
- //LogNT::getInstance()->debug(TAG, "libav out2");
- //LogNT::getInstance()->debug(TAG, "DMP mark 20");
+ //logger->debug(TAG, "libav out2");
+ //logger->debug(TAG, "DMP mark 20");
if (!omx_running)
{
libav_mutex.unlock();
if (decompress_buffer_filled) // reset to normal decoding
{
- if (len > 0)
- {
- // FIXME
-
- // len is int
- // decompress_buffer_filled is unsigned int
- // so if decompress_buffer_filled > len, len can go negative.
-
- // Why would you use a min function with one of the values hard coded to zero?
- // If param1 is positive the result is always 0.
- // If param1 is negative the result is always param1.
- // However, badMinimumFunction is and always was: int badMinimumFunction(u4 a, int b)
- // .. which takes param1 as unsigned. So whatever param1 is, the result is always 0.
-
- // A guess is that the intention was to try to calculate a positive result, but if
- // for some reason len-decompress_buffer_filled < 0, return 0.
- // But for that you would use a max() function...
-
- //haveToCopy -= badMinimumFunction(len - decompress_buffer_filled, 0);
- //*samplepos += badMinimumFunction(len - decompress_buffer_filled, 0);
-
- //int result = badMinimumFunction(len - decompress_buffer_filled, 0);
- //LogNT::getInstance()->debug(TAG, "RESULT : {}", result);
- //haveToCopy -= result;
- //*samplepos += result;
-
- //abort(); // When does this run?
- // 18 months later... This abort finally triggered. There now seems to be some channels which trigger this.
- // It's when there's not enough data to decode. This particular bit of code is after this half block
- // situation has occured, there is code above which glues the old saved data to new input and runs that
- // through libav. This is the cleanup code after this has happened. But - as it was written it never did
- // anything. haveToCopy and *samplepos were not moved. However - it works !! Why?? Is it leaking somehow?
- // Removing the abort
- // Removing the badMinimumFunction
- // Commenting out the above lines which move haveToCopy and *samplepos
- // Figure out in a future refactor if this needs further fixing
-
-
- // len is always either 0 or the result of avcodec_decode_audio4(current_context, decode_frame_libav, &gotta, &incoming_paket_libav);
- // the result of avcodec_decode_audio4 can be negative in case of error, but that is filtered out above
-
- // decompress_buffer_filled appears to be how much of the decompress buffer has already been written to.
- // Presumably things can happen in multiple chunks.
-
-
- //if (current_context->frame_size>0) framesize=min(current_context->frame_size,haveToCopy);
- /*else*/ framesize = haveToCopy;
-
- }
- else
- {
- framesize = haveToCopy;
- }
-
+ framesize = haveToCopy;
incoming_paket_libav.data = (uint8_t*) buffer + mpacket.pos_buffer + *samplepos;
errcount = 0;
decompress_buffer_filled = 0;
}
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 21");
+ //logger->debug(TAG, "DMP mark 21");
incoming_paket_libav.size = framesize;
if (gotta)
{
- //LogNT::getInstance()->debug(TAG,
- // "Got a frame");
+ //logger->debug(TAG, "Got a frame");
int dsize = av_samples_get_buffer_size(NULL,
/*current_context->channels*/2, decode_frame_libav->nb_samples,
if ((cur_input_buf_omx->nFilledLen + dsize) > cur_input_buf_omx->nAllocLen)
{
// I doubt that this will ever happen
- // LogNT::getInstance()->debug(TAG,
+ // logger->debug(TAG,
// "P 2 Time code {} pts {}", lastreftimeOMX, mpacket.pts);
error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
- if (error != OMX_ErrorNone)
- {
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 4 failed {:#x}", error);
- }
+ if (error != OMX_ErrorNone) logger->debug(TAG, "OMX_EmptyThisBuffer 4 failed {:#x}", error);
cur_input_buf_omx = NULL;
if (input_bufs_omx_free.size() == 0)
{
input_bufs_omx_mutex.unlock();
- // LogNT::getInstance()->debug(TAG,
- // "Deliver MediaPacket no free sample");
+ // logger->debug(TAG, "Deliver MediaPacket no free sample");
MILLISLEEP(5);
- //LogNT::getInstance()->debug(TAG, "DMP mark22");
+ //logger->debug(TAG, "DMP mark22");
if (!omx_running) return *samplepos;
- //LogNT::getInstance()->debug(TAG, "DMP mark 23");
+ //logger->debug(TAG, "DMP mark 23");
continue;
}
}
}
- //LogNT::getInstance()->debug(TAG,"memcpy in {} {} {}" ,dsize,current_context->sample_rate,cur_input_buf_omx->nFilledLen);
-
+ //logger->debug(TAG,"memcpy in {} {} {}" ,dsize,current_context->sample_rate,cur_input_buf_omx->nFilledLen);
av_opt_set_int(resam_con_libav, "in_sample_rate", decode_frame_libav->sample_rate, 0);
av_opt_set_int(resam_con_libav, "in_sample_fmt", decode_frame_libav->format, 0);
av_opt_set_int(resam_con_libav, "in_channel_layout", decode_frame_libav->channel_layout, 0);
- //LogNT::getInstance()->error(TAG, "AV resampledata {} {} {} {}",current_context->channels,current_context->sample_rate,current_context->sample_fmt,current_context->channel_layout);
- //LogNT::getInstance()->error(TAG, "AV resampledata2 {} {} {}",decode_frame_libav->sample_rate,decode_frame_libav->format,decode_frame_libav->channel_layout);
+ //logger->error(TAG, "AV resampledata {} {} {} {}",current_context->channels,current_context->sample_rate,current_context->sample_fmt,current_context->channel_layout);
+ //logger->error(TAG, "AV resampledata2 {} {} {}",decode_frame_libav->sample_rate,decode_frame_libav->format,decode_frame_libav->channel_layout);
int ret = swr_init(resam_con_libav);
if (ret < 0)
{
- LogNT::getInstance()->error(TAG, "Opening AV resample failed {}", ret);
+ logger->error(TAG, "Opening AV resample failed {}", ret);
}
else
{
uint8_t* output = cur_input_buf_omx->pBuffer + cur_input_buf_omx->nFilledLen;
- /*
- * old docs:
- avresample_convert ( AVAudioResampleContext * avr,
- uint8_t ** output,
- int out_plane_size,
- int out_samples,
- uint8_t *const * input,
- int in_plane_size,
- int in_samples
- )
-
- old call:
- avresample_convert(resam_con_libav,
- &output, dsize, decode_frame_libav->nb_samples,
- decode_frame_libav->extended_data, decode_frame_libav->linesize[0], decode_frame_libav->nb_samples);
-
- new docs:
- swr_convert ( struct SwrContext * s,
- uint8_t ** out,
- int out_count,
- const uint8_t ** in,
- int in_count
- )
- new call:
- */
- //LogNT::getInstance()->debug(TAG, "Calling swr_convert");
-
swr_convert(resam_con_libav, &output, decode_frame_libav->nb_samples, (const uint8_t**)decode_frame_libav->extended_data, decode_frame_libav->nb_samples);
-
swr_close(resam_con_libav);
}
- //LogNT::getInstance()->debug(TAG,"memcpy out");
cur_input_buf_omx->nFilledLen += dsize;
}
else
{
- //LogNT::getInstance()->debug(TAG,"Incomplete mpeg frames in pes packet {} {}",incoming_paket_libav.size,mpacket.length);
+ //logger->debug(TAG,"Incomplete mpeg frames in pes packet {} {}",incoming_paket_libav.size,mpacket.length);
/* uint8_t a1=incoming_paket_libav.data[0];
uint8_t a2=incoming_paket_libav.data[1];
uint8_t a3=incoming_paket_libav.data[2];
uint8_t a4=incoming_paket_libav.data[3];*/
- // LogNT::getInstance()->debug(TAG,"Header {:#x} {:#x} {:#x} {:#x}",a1,a2,
+ // logger->debug(TAG,"Header {:#x} {:#x} {:#x} {:#x}",a1,a2,
// a3,a4);
}
-
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 24");
+ //logger->debug(TAG, "DMP mark 24");
decompress_buffer_filled = 0;
if (haveToCopy)
{
- //LogNT::getInstance()->debug(TAG,"We can not decompress {} save for later {} {:#x} {:#x}",haveToCopy,mpacket.type,incoming_paket_libav.data,mpacket.pos_buffer);
+ //logger->debug(TAG,"We can not decompress {} save for later {} {:#x} {:#x}",haveToCopy,mpacket.type,incoming_paket_libav.data,mpacket.pos_buffer);
memcpy(decompress_buffer, incoming_paket_libav.data, std::min(haveToCopy, decompress_buffer_size));
decompress_buffer_filled = std::min(haveToCopy, decompress_buffer_size);
}
if (cur_input_buf_omx->nFilledLen)
{
- //LogNT::getInstance()->debug(TAG,
- // "P 3 Time code {} pts {}", lastreftimeOMX, mpacket.pts);
+ //logger->debug(TAG, "P 3 Time code {} pts {}", lastreftimeOMX, mpacket.pts);
error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
- if (error != OMX_ErrorNone)
- {
- LogNT::getInstance()->debug(TAG, "OMX_EmptyThisBuffer 5 failed {:#x}", error);
- }
+ if (error != OMX_ErrorNone) logger->debug(TAG, "OMX_EmptyThisBuffer 5 failed {:#x}", error);
//if (mpacket.synched) vw->AdjustAudioPTS(correctAudioLatency(lastreftimeOMX,cur_input_buf_omx->nFilledLen/(2*2),48000));
cur_input_buf_omx = NULL;
}
}
- //LogNT::getInstance()->debug(TAG, "DMP mark 25");
+ //logger->debug(TAG, "DMP mark 25");
*samplepos = mpacket.length;
return mpacket.length;
vw->ResetTimeOffsets();
}
-/*
-int AudioOMX::badMinimumFunction(u4 a, int b)
-{
- printf("MIN: P1: %u, P2: %i\n", a, b);
-
- if (a > b) return b;
- else return a;
-}
-*/
-
int AudioOMX::DO_NOT_USE(AVCodecContext* avctx, // used - sent to avcodec_send_packet
AVFrame* frame, // used - object for receive to write to
int* got_frame_ptr, // out param
// error
return -9999; // no idea. looks like calling code checks got_frame_ptr
}
+//2762